diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index 9786771c434..426cf83e2ec 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest - digest: sha256:3c950ed12391ebaffd1ee66d0374766a1c50144ebe6a7a0042300b2e6bb5856b + digest: sha256:b0b1c1c89570e229b1026372a2b8989ba31495007055b8d30178b7648503eefa diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a5cbf4698c8..a54ef1233b0 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -5,3 +5,6 @@ Thank you for opening a Pull Request! Before submitting your PR, there are a few - [ ] Appropriate docs were updated (if necessary) Fixes # ☕️ + +If you write sample code, please follow the [samples format]( +https://github.com/GoogleCloudPlatform/java-docs-samples/blob/main/SAMPLE_FORMAT.md). diff --git a/.github/workflows/approve-readme.yaml b/.github/workflows/approve-readme.yaml index 1bb18232761..f5fc7d5169e 100644 --- a/.github/workflows/approve-readme.yaml +++ b/.github/workflows/approve-readme.yaml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest if: github.repository_owner == 'googleapis' && github.head_ref == 'autosynth-readme' steps: - - uses: actions/github-script@v5 + - uses: actions/github-script@v6 with: github-token: ${{secrets.YOSHI_APPROVER_TOKEN}} script: | diff --git a/.github/workflows/auto-release.yaml b/.github/workflows/auto-release.yaml index 18e23230d98..7a106d007ed 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@v5 + - uses: actions/github-script@v6 with: github-token: ${{secrets.YOSHI_APPROVER_TOKEN}} debug: true diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6b5e56aaacd..83ef7f9c2cf 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -27,8 +27,8 @@ jobs: matrix: java: [8, 11, 17] steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 with: distribution: zulu java-version: ${{matrix.java}} @@ -39,8 +39,8 @@ jobs: windows: runs-on: windows-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 with: distribution: zulu java-version: 8 @@ -54,8 +54,8 @@ jobs: matrix: java: [8, 11, 17] steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 with: distribution: zulu java-version: ${{matrix.java}} @@ -64,8 +64,8 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 with: distribution: zulu java-version: 11 @@ -76,8 +76,8 @@ jobs: clirr: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 with: distribution: zulu java-version: 8 diff --git a/.kokoro/build.bat b/.kokoro/build.bat index cc602c9eba8..067cf4a4c48 100644 --- a/.kokoro/build.bat +++ b/.kokoro/build.bat @@ -1,18 +1,18 @@ +:: Copyright 2022 Google LLC +:: +:: Licensed under the Apache License, Version 2.0 (the "License"); +:: you may not use this file except in compliance with the License. +:: You may obtain a copy of the License at +:: +:: http://www.apache.org/licenses/LICENSE-2.0 +:: +:: Unless required by applicable law or agreed to in writing, software +:: distributed under the License is distributed on an "AS IS" BASIS, +:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +:: See the License for the specific language governing permissions and +:: limitations under the License. +:: Github action job to test core java library features on +:: downstream client libraries before they are released. :: See documentation in type-shell-output.bat -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# Github action job to test core java library features on -# downstream client libraries before they are released. "C:\Program Files\Git\bin\bash.exe" %~dp0build.sh diff --git a/.kokoro/nightly/integration.cfg b/.kokoro/nightly/integration.cfg index e51c7b4c6c1..a2907a257b2 100644 --- a/.kokoro/nightly/integration.cfg +++ b/.kokoro/nightly/integration.cfg @@ -13,12 +13,12 @@ env_vars: { # TODO: remove this after we've migrated all tests and scripts env_vars: { key: "GCLOUD_PROJECT" - value: "gcloud-devel" + value: "java-docs-samples-testing" } env_vars: { key: "GOOGLE_CLOUD_PROJECT" - value: "gcloud-devel" + value: "java-docs-samples-testing" } env_vars: { diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d54093b151..4630625dc85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Changelog +## [6.21.0](https://github.com/googleapis/java-spanner/compare/v6.20.0...v6.21.0) (2022-03-08) + + +### Features + +* parse query parameters in PostgreSQL query ([#1732](https://github.com/googleapis/java-spanner/issues/1732)) ([7357ac6](https://github.com/googleapis/java-spanner/commit/7357ac6e3ddfdfee37e70343a970e7e63fb08bf2)) +* Track PG Adapter usage from user-agent headers ([#1711](https://github.com/googleapis/java-spanner/issues/1711)) ([cb640ab](https://github.com/googleapis/java-spanner/commit/cb640abeb8ec9321136b86d5b54e620dba087080)) + + +### Bug Fixes + +* annotating some fields as REQUIRED ([#1695](https://github.com/googleapis/java-spanner/issues/1695)) ([8b90b6c](https://github.com/googleapis/java-spanner/commit/8b90b6cce0fd36a1e3ca1c8e0c0f34661ab9c2a3)) +* catch ExecutionException for op.getName ([#1729](https://github.com/googleapis/java-spanner/issues/1729)) ([8ea3ac0](https://github.com/googleapis/java-spanner/commit/8ea3ac086371beebd22f04c8c5f74beb8058e84f)) +* PostgreSQL supports newline in quoted literals and identifiers ([#1731](https://github.com/googleapis/java-spanner/issues/1731)) ([f403d99](https://github.com/googleapis/java-spanner/commit/f403d99acd21db8d494855d71b5ec410164a5232)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-monitoring to v3.2.4 ([#1719](https://github.com/googleapis/java-spanner/issues/1719)) ([20336cd](https://github.com/googleapis/java-spanner/commit/20336cd5d3307a48f968587212af38872dec5a50)) +* update dependency com.google.cloud:google-cloud-monitoring to v3.2.5 ([#1727](https://github.com/googleapis/java-spanner/issues/1727)) ([92a9f14](https://github.com/googleapis/java-spanner/commit/92a9f148b8dcbd0ac7ca1ff0029ad7c09f577e40)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.8.0 ([#1722](https://github.com/googleapis/java-spanner/issues/1722)) ([9704974](https://github.com/googleapis/java-spanner/commit/9704974a92f56886269e6cbcb1f74528fbe7e73f)) +* update dependency com.google.cloud:google-cloud-trace to v2.1.4 ([#1728](https://github.com/googleapis/java-spanner/issues/1728)) ([d193a26](https://github.com/googleapis/java-spanner/commit/d193a26ec46df1b229103ec50c0db9b62d98507a)) + ## [6.20.0](https://github.com/googleapis/java-spanner/compare/v6.19.1...v6.20.0) (2022-02-22) diff --git a/README.md b/README.md index 0ca34109dc3..5e42c07e541 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file com.google.cloud libraries-bom - 24.3.0 + 24.4.0 pom import @@ -41,7 +41,7 @@ If you are using Maven without BOM, add this to your dependencies: com.google.cloud google-cloud-spanner - 6.19.0 + 6.20.0 ``` @@ -49,20 +49,20 @@ If you are using Maven without 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:24.3.0') +implementation platform('com.google.cloud:libraries-bom:24.4.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.19.1' +implementation 'com.google.cloud:google-cloud-spanner:6.20.0' ``` If you are using SBT, add this to your dependencies ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.19.1" +libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.20.0" ``` ## Authentication diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml index 0bab7aed0e6..1f0ee07676a 100644 --- a/google-cloud-spanner-bom/pom.xml +++ b/google-cloud-spanner-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-spanner-bom - 6.20.0 + 6.21.0 pom com.google.cloud @@ -53,43 +53,43 @@ com.google.cloud google-cloud-spanner - 6.20.0 + 6.21.0 com.google.cloud google-cloud-spanner test-jar - 6.20.0 + 6.21.0 com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.20.0 + 6.21.0 com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.20.0 + 6.21.0 com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.20.0 + 6.21.0 com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.20.0 + 6.21.0 com.google.api.grpc proto-google-cloud-spanner-v1 - 6.20.0 + 6.21.0 com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.20.0 + 6.21.0 @@ -100,7 +100,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.9.0 + 3.10.0 1.8 1.8 diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml index 5ca56d5010b..50a58a222d4 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.20.0 + 6.21.0 jar Google Cloud Spanner https://github.com/googleapis/java-spanner @@ -11,7 +11,7 @@ com.google.cloud google-cloud-spanner-parent - 6.20.0 + 6.21.0 google-cloud-spanner 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 65de63b720f..b62b2d44556 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 @@ -80,6 +80,7 @@ public class SpannerOptions extends ServiceOptions { private static final String JDBC_API_CLIENT_LIB_TOKEN = "sp-jdbc"; private static final String HIBERNATE_API_CLIENT_LIB_TOKEN = "sp-hib"; private static final String LIQUIBASE_API_CLIENT_LIB_TOKEN = "sp-liq"; + 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"; @@ -657,7 +658,8 @@ public static class Builder ServiceOptions.getGoogApiClientLibName(), JDBC_API_CLIENT_LIB_TOKEN, HIBERNATE_API_CLIENT_LIB_TOKEN, - LIQUIBASE_API_CLIENT_LIB_TOKEN); + LIQUIBASE_API_CLIENT_LIB_TOKEN, + PG_ADAPTER_CLIENT_LIB_TOKEN); private TransportChannelProvider channelProvider; @SuppressWarnings("rawtypes") 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 82fb12acac3..ba68a5b513c 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 @@ -460,7 +460,7 @@ private boolean statementStartsWith(String sql, Iterable checkStatements static final char HYPHEN = '-'; static final char DASH = '#'; static final char SLASH = '/'; - static final char ASTERIKS = '*'; + static final char ASTERISK = '*'; static final char DOLLAR = '$'; /** 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 0b29bec5333..19712f78787 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 @@ -21,6 +21,9 @@ import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.common.base.Preconditions; +import java.util.HashSet; +import java.util.Set; +import javax.annotation.Nullable; @InternalApi public class PostgreSQLStatementParser extends AbstractStatementParser { @@ -56,95 +59,44 @@ protected boolean supportsExplain() { @Override String removeCommentsAndTrimInternal(String sql) { Preconditions.checkNotNull(sql); - String currentTag = null; - boolean isInQuoted = false; boolean isInSingleLineComment = false; int multiLineCommentLevel = 0; - char startQuote = 0; - boolean lastCharWasEscapeChar = false; StringBuilder res = new StringBuilder(sql.length()); int index = 0; while (index < sql.length()) { char c = sql.charAt(index); - if (isInQuoted) { - if ((c == '\n' || c == '\r') && startQuote != DOLLAR) { - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.INVALID_ARGUMENT, "SQL statement contains an unclosed literal: " + sql); - } else if (c == startQuote) { - if (c == DOLLAR) { - // Check if this is the end of the current dollar quoted string. - String tag = parseDollarQuotedString(sql, index + 1); - if (tag != null && tag.equals(currentTag)) { - index += tag.length() + 1; - res.append(c); - res.append(tag); - isInQuoted = false; - startQuote = 0; - } - } else if (lastCharWasEscapeChar) { - lastCharWasEscapeChar = false; - } else if (sql.length() > index + 1 && sql.charAt(index + 1) == startQuote) { - // This is an escaped quote (e.g. 'foo''bar') - res.append(c); - index++; - } else { - isInQuoted = false; - startQuote = 0; - } - } else if (c == '\\') { - lastCharWasEscapeChar = true; - } else { - lastCharWasEscapeChar = false; + if (isInSingleLineComment) { + if (c == '\n') { + isInSingleLineComment = false; + // Include the line feed in the result. + res.append(c); + } + } else if (multiLineCommentLevel > 0) { + if (sql.length() > index + 1 && c == ASTERISK && sql.charAt(index + 1) == SLASH) { + multiLineCommentLevel--; + index++; + } else if (sql.length() > index + 1 && c == SLASH && sql.charAt(index + 1) == ASTERISK) { + multiLineCommentLevel++; + index++; } - res.append(c); } else { - // We are not in a quoted string. - if (isInSingleLineComment) { - if (c == '\n') { - isInSingleLineComment = false; - // Include the line feed in the result. - res.append(c); - } - } else if (multiLineCommentLevel > 0) { - if (sql.length() > index + 1 && c == ASTERIKS && sql.charAt(index + 1) == SLASH) { - multiLineCommentLevel--; - index++; - } else if (sql.length() > index + 1 && c == SLASH && sql.charAt(index + 1) == ASTERIKS) { - multiLineCommentLevel++; - index++; - } + // Check for -- which indicates the start of a single-line comment. + if (sql.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) { + multiLineCommentLevel++; + index += 2; + continue; } else { - // Check for -- which indicates the start of a single-line comment. - if (sql.length() > index + 1 && c == HYPHEN && sql.charAt(index + 1) == HYPHEN) { - // This is a single line comment. - isInSingleLineComment = true; - } else if (sql.length() > index + 1 && c == SLASH && sql.charAt(index + 1) == ASTERIKS) { - multiLineCommentLevel++; - index++; - } else { - if (c == SINGLE_QUOTE || c == DOUBLE_QUOTE) { - isInQuoted = true; - startQuote = c; - } else if (c == DOLLAR) { - currentTag = parseDollarQuotedString(sql, index + 1); - if (currentTag != null) { - isInQuoted = true; - startQuote = DOLLAR; - index += currentTag.length() + 1; - res.append(c); - res.append(currentTag); - } - } - res.append(c); - } + index = skip(sql, index, res); + continue; } } index++; } - if (isInQuoted) { - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.INVALID_ARGUMENT, "SQL statement contains an unclosed literal: " + sql); - } if (multiLineCommentLevel > 0) { throw SpannerExceptionFactory.newSpannerException( ErrorCode.INVALID_ARGUMENT, @@ -184,73 +136,136 @@ String removeStatementHint(String sql) { ParametersInfo convertPositionalParametersToNamedParametersInternal(char paramChar, String sql) { Preconditions.checkNotNull(sql); final String namedParamPrefix = "$"; - String currentTag = null; - boolean isInQuoted = false; - char startQuote = 0; - boolean lastCharWasEscapeChar = false; StringBuilder named = new StringBuilder(sql.length() + countOccurrencesOf(paramChar, sql)); int index = 0; int paramIndex = 1; while (index < sql.length()) { char c = sql.charAt(index); - if (isInQuoted) { - if ((c == '\n' || c == '\r') && startQuote != DOLLAR) { - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.INVALID_ARGUMENT, "SQL statement contains an unclosed literal: " + sql); - } else if (c == startQuote) { - if (c == DOLLAR) { - // Check if this is the end of the current dollar quoted string. - String tag = parseDollarQuotedString(sql, index + 1); - if (tag != null && tag.equals(currentTag)) { - index += tag.length() + 1; - named.append(c); - named.append(tag); - isInQuoted = false; - startQuote = 0; - } - } else if (lastCharWasEscapeChar) { - lastCharWasEscapeChar = false; - } else if (sql.length() > index + 1 && sql.charAt(index + 1) == startQuote) { - // This is an escaped quote (e.g. 'foo''bar') - named.append(c); - index++; - } else { - isInQuoted = false; - startQuote = 0; - } - } else if (c == '\\') { - lastCharWasEscapeChar = true; - } else { - lastCharWasEscapeChar = false; + if (c == paramChar) { + named.append(namedParamPrefix).append(paramIndex); + paramIndex++; + index++; + } else { + index = skip(sql, index, named); + } + } + return new ParametersInfo(paramIndex - 1, named.toString()); + } + + /** + * Note: This is an internal API and breaking changes can be made without prior notice. + * + *

Returns the PostgreSQL-style query parameters ($1, $2, ...) in the given SQL string. The + * SQL-string is assumed to not contain any comments. Use {@link #removeCommentsAndTrim(String)} + * to remove all comments before calling this method. Occurrences of query-parameter like strings + * inside quoted identifiers or string literals are ignored. + * + *

The following example will return a set containing ("$1", "$2"). + * select col1, col2, "col$4" + * from some_table + * where col1=$1 and col2=$2 + * and not col3=$1 and col4='$3' + * + * + * @param sql the SQL-string to check for parameters. Must not contain comments. + * @return A set containing all the parameters in the SQL-string. + */ + @InternalApi + public Set getQueryParameters(String sql) { + Preconditions.checkNotNull(sql); + int maxCount = countOccurrencesOf('$', sql); + Set parameters = new HashSet<>(maxCount); + int currentIndex = 0; + while (currentIndex < sql.length() - 1) { + char c = sql.charAt(currentIndex); + if (c == '$' && Character.isDigit(sql.charAt(currentIndex + 1))) { + // Look ahead for the first non-digit. That is the end of the query parameter. + int endIndex = currentIndex + 2; + while (endIndex < sql.length() && Character.isDigit(sql.charAt(endIndex))) { + endIndex++; } - named.append(c); + parameters.add(sql.substring(currentIndex, endIndex)); + currentIndex = endIndex; } else { - if (c == paramChar) { - named.append(namedParamPrefix + paramIndex); - paramIndex++; - } else { - if (c == SINGLE_QUOTE || c == DOUBLE_QUOTE) { - isInQuoted = true; - startQuote = c; - } else if (c == DOLLAR) { - currentTag = parseDollarQuotedString(sql, index + 1); - if (currentTag != null) { - isInQuoted = true; - startQuote = DOLLAR; - index += currentTag.length() + 1; - named.append(c); - named.append(currentTag); - } + currentIndex = skip(sql, currentIndex, null); + } + } + return parameters; + } + + private int skip(String sql, int currentIndex, @Nullable StringBuilder result) { + char currentChar = sql.charAt(currentIndex); + if (currentChar == SINGLE_QUOTE || currentChar == DOUBLE_QUOTE) { + appendIfNotNull(result, currentChar); + return skipQuoted(sql, currentIndex, currentChar, result); + } else if (currentChar == DOLLAR) { + String dollarTag = parseDollarQuotedString(sql, currentIndex + 1); + if (dollarTag != null) { + appendIfNotNull(result, currentChar, dollarTag, currentChar); + return skipQuoted( + sql, currentIndex + dollarTag.length() + 1, currentChar, dollarTag, result); + } + } + + appendIfNotNull(result, currentChar); + return currentIndex + 1; + } + + private int skipQuoted( + String sql, int startIndex, char startQuote, @Nullable StringBuilder result) { + return skipQuoted(sql, startIndex, startQuote, null, result); + } + + private int skipQuoted( + String sql, + int startIndex, + char startQuote, + String dollarTag, + @Nullable StringBuilder result) { + boolean lastCharWasEscapeChar = false; + int currentIndex = startIndex + 1; + while (currentIndex < sql.length()) { + char currentChar = sql.charAt(currentIndex); + if (currentChar == startQuote) { + if (currentChar == DOLLAR) { + // Check if this is the end of the current dollar quoted string. + String tag = parseDollarQuotedString(sql, currentIndex + 1); + if (tag != null && tag.equals(dollarTag)) { + appendIfNotNull(result, currentChar, dollarTag, currentChar); + return currentIndex + tag.length() + 2; } - named.append(c); + } else if (lastCharWasEscapeChar) { + lastCharWasEscapeChar = false; + } else if (sql.length() > currentIndex + 1 && sql.charAt(currentIndex + 1) == startQuote) { + // This is an escaped quote (e.g. 'foo''bar') + appendIfNotNull(result, currentChar); + appendIfNotNull(result, currentChar); + currentIndex += 2; + continue; + } else { + appendIfNotNull(result, currentChar); + return currentIndex + 1; } + } else { + lastCharWasEscapeChar = currentChar == '\\'; } - index++; + currentIndex++; + appendIfNotNull(result, currentChar); } - if (isInQuoted) { - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.INVALID_ARGUMENT, "SQL statement contains an unclosed literal: " + sql); + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, "SQL statement contains an unclosed literal: " + sql); + } + + private void appendIfNotNull(@Nullable StringBuilder result, char currentChar) { + if (result != null) { + result.append(currentChar); + } + } + + private void appendIfNotNull( + @Nullable StringBuilder result, char prefix, String tag, char suffix) { + if (result != null) { + result.append(prefix).append(tag).append(suffix); } - return new ParametersInfo(paramIndex - 1, named.toString()); } } 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 a9c7624f273..156ee2e7f6f 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 @@ -106,7 +106,7 @@ String removeCommentsAndTrimInternal(String sql) { res.append(c); } } else if (isInMultiLineComment) { - if (sql.length() > index + 1 && c == ASTERIKS && sql.charAt(index + 1) == SLASH) { + if (sql.length() > index + 1 && c == ASTERISK && sql.charAt(index + 1) == SLASH) { isInMultiLineComment = false; index++; } @@ -115,7 +115,7 @@ String removeCommentsAndTrimInternal(String sql) { || (sql.length() > index + 1 && c == HYPHEN && sql.charAt(index + 1) == HYPHEN)) { // This is a single line comment. isInSingleLineComment = true; - } else if (sql.length() > index + 1 && c == SLASH && sql.charAt(index + 1) == ASTERIKS) { + } else if (sql.length() > index + 1 && c == SLASH && sql.charAt(index + 1) == ASTERISK) { isInMultiLineComment = true; index++; } else { 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 fc82954ad40..7d5c8a553aa 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 @@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThrows; import static org.mockito.Mockito.mock; @@ -502,6 +503,7 @@ public void testDoNotCacheClosedSpannerInstance() { public void testSetClientLibToken() { final String jdbcToken = "sp-jdbc"; final String hibernateToken = "sp-hib"; + final String pgAdapterToken = "pg-adapter"; SpannerOptions options = SpannerOptions.newBuilder() .setProjectId("some-project") @@ -522,8 +524,16 @@ public void testSetClientLibToken() { SpannerOptions.newBuilder() .setProjectId("some-project") .setCredentials(NoCredentials.getInstance()) + .setClientLibToken(pgAdapterToken) .build(); - assertThat(options.getClientLibToken()).isEqualTo(ServiceOptions.getGoogApiClientLibName()); + assertEquals(options.getClientLibToken(), pgAdapterToken); + + options = + SpannerOptions.newBuilder() + .setProjectId("some-project") + .setCredentials(NoCredentials.getInstance()) + .build(); + assertEquals(options.getClientLibToken(), ServiceOptions.getGoogApiClientLibName()); } @Test(expected = IllegalArgumentException.class) 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 d2176b53a2e..96d4b7e3aef 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 @@ -24,6 +24,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.junit.Assume.assumeTrue; import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; @@ -33,6 +34,7 @@ import com.google.cloud.spanner.connection.AbstractStatementParser.StatementType; import com.google.cloud.spanner.connection.ClientSideStatementImpl.CompileException; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.truth.Truth; import java.io.File; import java.io.FileNotFoundException; @@ -42,7 +44,6 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.junit.Assume; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -127,11 +128,38 @@ public void testRemoveComments() { parser.removeCommentsAndTrim( "/* This\nis\na\nmulti\nline\ncomment */\nSELECT * FROM FOO")) .isEqualTo("SELECT * FROM FOO"); + + assertEquals( + "SELECT \"FOO\" FROM \"BAR\" WHERE name='test'", + parser.removeCommentsAndTrim( + "-- Single line comment\nSELECT \"FOO\" FROM \"BAR\" WHERE name='test'")); + assertEquals( + "SELECT \"FOO\" FROM \"BAR\" WHERE name='test' and id=1", + parser.removeCommentsAndTrim( + "/* Multi\n" + + "line\n" + + "comment\n" + + "*/SELECT \"FOO\" FROM \"BAR\" WHERE name='test' and id=1")); + + if (dialect == Dialect.POSTGRESQL) { + // PostgreSQL allows string literals and quoted identifiers to contain newline characters. + assertEquals( + "SELECT \"FOO\nBAR\" FROM \"BAR\" WHERE name='test\ntest'", + parser.removeCommentsAndTrim( + "-- Single line comment\nSELECT \"FOO\nBAR\" FROM \"BAR\" WHERE name='test\ntest'")); + assertEquals( + "SELECT \"FOO\nBAR\" FROM \"BAR\" WHERE name='test\ntest' and id=1", + parser.removeCommentsAndTrim( + "/* Multi\n" + + "line\n" + + "comment\n" + + "*/SELECT \"FOO\nBAR\" FROM \"BAR\" WHERE name='test\ntest' and id=1")); + } } @Test public void testGoogleStandardSQLRemoveCommentsGsql() { - Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); + assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); assertThat(parser.removeCommentsAndTrim("/*GSQL*/")).isEqualTo(""); assertThat(parser.removeCommentsAndTrim("/*GSQL*/SELECT * FROM FOO")) @@ -156,7 +184,7 @@ public void testGoogleStandardSQLRemoveCommentsGsql() { @Test public void testPostgreSQLDialectRemoveCommentsGsql() { - Assume.assumeTrue(dialect == Dialect.POSTGRESQL); + assumeTrue(dialect == Dialect.POSTGRESQL); assertThat(parser.removeCommentsAndTrim("/*GSQL*/")).isEqualTo("/*GSQL*/"); assertThat(parser.removeCommentsAndTrim("/*GSQL*/SELECT * FROM FOO")) @@ -246,7 +274,7 @@ public void testStatementWithCommentContainingSlashAndNoAsteriskOnNewLine() { @Test public void testPostgresSQLDialectDollarQuoted() { - Assume.assumeTrue(dialect == Dialect.POSTGRESQL); + assumeTrue(dialect == Dialect.POSTGRESQL); assertThat(parser.removeCommentsAndTrim("$$foo$$")).isEqualTo("$$foo$$"); assertThat(parser.removeCommentsAndTrim("$$--foo$$")).isEqualTo("$$--foo$$"); @@ -269,7 +297,7 @@ public void testPostgresSQLDialectDollarQuoted() { @Test public void testPostgreSQLDialectSupportsEmbeddedComments() { - Assume.assumeTrue(dialect == Dialect.POSTGRESQL); + assumeTrue(dialect == Dialect.POSTGRESQL); final String sql = "/* This is a comment /* This is an embedded comment */ This is after the embedded comment */ SELECT 1"; @@ -278,7 +306,7 @@ public void testPostgreSQLDialectSupportsEmbeddedComments() { @Test public void testGoogleStandardSQLDialectDoesNotSupportEmbeddedComments() { - Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); + 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"; @@ -288,7 +316,7 @@ public void testGoogleStandardSQLDialectDoesNotSupportEmbeddedComments() { @Test public void testPostgreSQLDialectUnterminatedComment() { - Assume.assumeTrue(dialect == Dialect.POSTGRESQL); + assumeTrue(dialect == Dialect.POSTGRESQL); final String sql = "/* This is a comment /* This is still a comment */ this is unterminated SELECT 1"; @@ -307,7 +335,7 @@ public void testPostgreSQLDialectUnterminatedComment() { @Test public void testGoogleStandardSqlDialectDialectUnterminatedComment() { - Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); + assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); final String sql = "/* This is a comment /* This is still a comment */ this is unterminated SELECT 1"; @@ -333,7 +361,7 @@ public void testShowStatements() { @Test public void testGoogleStandardSQLDialectStatementWithHashTagSingleLineComment() { - Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); + assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); // Supports # based comments assertThat( @@ -355,7 +383,7 @@ public void testGoogleStandardSQLDialectStatementWithHashTagSingleLineComment() @Test public void testPostgreSQLDialectStatementWithHashTagSingleLineComment() { - Assume.assumeTrue(dialect == Dialect.POSTGRESQL); + assumeTrue(dialect == Dialect.POSTGRESQL); // Does not support # based comments assertThat( @@ -588,7 +616,7 @@ public void testIsQuery() { @Test public void testGoogleStandardSQLDialectIsQuery_QueryHints() { - Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); + assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); // Supports query hints, PostgreSQL dialect does NOT // Valid query hints. @@ -636,7 +664,7 @@ public void testGoogleStandardSQLDialectIsQuery_QueryHints() { @Test public void testIsUpdate_QueryHints() { - Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); + assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); // Supports query hints, PostgreSQL dialect does NOT // Valid query hints. @@ -1066,7 +1094,7 @@ public void testConvertPositionalParametersToNamedParametersWithGsqlException() @Test public void testGoogleStandardSQLDialectConvertPositionalParametersToNamedParameters() { - Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); + assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL); assertThat( parser.convertPositionalParametersToNamedParameters( @@ -1176,7 +1204,7 @@ public void testGoogleStandardSQLDialectConvertPositionalParametersToNamedParame @Test public void testPostgreSQLDialectDialectConvertPositionalParametersToNamedParameters() { - Assume.assumeTrue(dialect == Dialect.POSTGRESQL); + assumeTrue(dialect == Dialect.POSTGRESQL); assertThat( parser.convertPositionalParametersToNamedParameters( @@ -1221,9 +1249,16 @@ public void testPostgreSQLDialectDialectConvertPositionalParametersToNamedParame .sqlWithNamedParameters) .isEqualTo("$1$$?it\\'?s \n ?it\\'?s$$$2"); - assertUnclosedLiteral("?'?it\\'?s \n ?it\\'?s'?"); + // Note: PostgreSQL allows a single-quoted string literal to contain line feeds. + assertEquals( + "$1'?it\\'?s \n ?it\\'?s'$2", + parser.convertPositionalParametersToNamedParameters('?', "?'?it\\'?s \n ?it\\'?s'?") + .sqlWithNamedParameters); assertUnclosedLiteral("?'?it\\'?s \n ?it\\'?s?"); - assertUnclosedLiteral("?'''?it\\'?s \n ?it\\'?s'?"); + assertEquals( + "$1'''?it\\'?s \n ?it\\'?s'$2", + parser.convertPositionalParametersToNamedParameters('?', "?'''?it\\'?s \n ?it\\'?s'?") + .sqlWithNamedParameters); assertThat( parser.convertPositionalParametersToNamedParameters( @@ -1284,6 +1319,25 @@ public void testPostgreSQLDialectDialectConvertPositionalParametersToNamedParame + "and col8 between $12 and $13"))); } + @Test + public void testPostgreSQLGetQueryParameters() { + assumeTrue(dialect == Dialect.POSTGRESQL); + + PostgreSQLStatementParser parser = (PostgreSQLStatementParser) this.parser; + assertEquals(ImmutableSet.of(), parser.getQueryParameters("select * from foo")); + assertEquals( + ImmutableSet.of("$1"), parser.getQueryParameters("select * from foo where bar=$1")); + assertEquals( + ImmutableSet.of("$1", "$2", "$3"), + parser.getQueryParameters("select $2 from foo where bar=$1 and baz=$3")); + assertEquals( + ImmutableSet.of("$1", "$3"), + parser.getQueryParameters("select '$2' from foo where bar=$1 and baz in ($1, $3)")); + assertEquals( + ImmutableSet.of("$1"), + parser.getQueryParameters("select '$2' from foo where bar=$1 and baz=$foo")); + } + private void assertUnclosedLiteral(String sql) { try { parser.convertPositionalParametersToNamedParameters('?', sql); 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 e27909abe89..bf65f7147ab 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 @@ -467,12 +467,9 @@ public void test02_RetryNonIdempotentRpcsReturningLongRunningOperations() throws } try { client.cancelOperation(op.getName()); - } catch (SpannerException e) { - // Ignore UNIMPLEMENTED errors, as it seems that Cloud Spanner cannot cancel a restore - // operation that has already started. - if (e.getErrorCode() != ErrorCode.UNIMPLEMENTED) { - throw e; - } + } catch (SpannerException | ExecutionException e) { + // Ignore, this can happen, as the restore operation sometimes fails to start if there + // is already a restore operation running on the instance. } // Assert that the RestoreDatabase RPC was called only once, and that the operation // tracking was resumed through a GetOperation call. diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml index 12e7d1ad27d..55091381388 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.20.0 + 6.21.0 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.20.0 + 6.21.0 diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml index e93ecf06e1b..160ce9374b1 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.20.0 + 6.21.0 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.20.0 + 6.21.0 diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml index 1857f3951cf..a0a4bfd69ae 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.20.0 + 6.21.0 grpc-google-cloud-spanner-v1 GRPC library for grpc-google-cloud-spanner-v1 com.google.cloud google-cloud-spanner-parent - 6.20.0 + 6.21.0 diff --git a/pom.xml b/pom.xml index f5a8ce18e53..563131538ec 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-spanner-parent pom - 6.20.0 + 6.21.0 Google Cloud Spanner Parent https://github.com/googleapis/java-spanner @@ -54,7 +54,7 @@ UTF-8 github google-cloud-spanner-parent - 2.7.0 + 2.8.0 @@ -62,37 +62,37 @@ com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.20.0 + 6.21.0 com.google.api.grpc proto-google-cloud-spanner-v1 - 6.20.0 + 6.21.0 com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.20.0 + 6.21.0 com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.20.0 + 6.21.0 com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.20.0 + 6.21.0 com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.20.0 + 6.21.0 com.google.cloud google-cloud-spanner - 6.20.0 + 6.21.0 @@ -141,7 +141,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.9.0 + 3.10.0 1.8 1.8 @@ -159,7 +159,7 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.2.1 + 3.2.2 diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml index cc3b9e1b064..e652c2954c7 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.20.0 + 6.21.0 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.20.0 + 6.21.0 diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml index 2e54e861398..76173b6e056 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.20.0 + 6.21.0 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.20.0 + 6.21.0 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 b24629fb2cd..ecae61417bd 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 @@ -359,7 +359,7 @@ private State(int value) { * segment of the name must be between 2 and 64 characters in length. * * - * string name = 1; + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The name. */ @@ -385,7 +385,7 @@ public java.lang.String getName() { * segment of the name must be between 2 and 64 characters in length. * * - * string name = 1; + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for name. */ @@ -414,7 +414,9 @@ public com.google.protobuf.ByteString getNameBytes() { * [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. * * - * string config = 2 [(.google.api.resource_reference) = { ... } + * + * string config = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * * * @return The config. */ @@ -440,7 +442,9 @@ public java.lang.String getConfig() { * [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. * * - * string config = 2 [(.google.api.resource_reference) = { ... } + * + * string config = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * * * @return The bytes for config. */ @@ -467,7 +471,7 @@ public com.google.protobuf.ByteString getConfigBytes() { * Must be unique per project and between 4 and 30 characters in length. * * - * string display_name = 3; + * string display_name = 3 [(.google.api.field_behavior) = REQUIRED]; * * @return The displayName. */ @@ -491,7 +495,7 @@ public java.lang.String getDisplayName() { * Must be unique per project and between 4 and 30 characters in length. * * - * string display_name = 3; + * string display_name = 3 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for displayName. */ @@ -1310,7 +1314,7 @@ public Builder mergeFrom( * segment of the name must be between 2 and 64 characters in length. * * - * string name = 1; + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The name. */ @@ -1335,7 +1339,7 @@ public java.lang.String getName() { * segment of the name must be between 2 and 64 characters in length. * * - * string name = 1; + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for name. */ @@ -1360,7 +1364,7 @@ public com.google.protobuf.ByteString getNameBytes() { * segment of the name must be between 2 and 64 characters in length. * * - * string name = 1; + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; * * @param value The name to set. * @return This builder for chaining. @@ -1384,7 +1388,7 @@ public Builder setName(java.lang.String value) { * segment of the name must be between 2 and 64 characters in length. * * - * string name = 1; + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return This builder for chaining. */ @@ -1404,7 +1408,7 @@ public Builder clearName() { * segment of the name must be between 2 and 64 characters in length. * * - * string name = 1; + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; * * @param value The bytes for name to set. * @return This builder for chaining. @@ -1431,7 +1435,9 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { * [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. * * - * string config = 2 [(.google.api.resource_reference) = { ... } + * + * string config = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * * * @return The config. */ @@ -1456,7 +1462,9 @@ public java.lang.String getConfig() { * [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. * * - * string config = 2 [(.google.api.resource_reference) = { ... } + * + * string config = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * * * @return The bytes for config. */ @@ -1481,7 +1489,9 @@ public com.google.protobuf.ByteString getConfigBytes() { * [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. * * - * string config = 2 [(.google.api.resource_reference) = { ... } + * + * string config = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * * * @param value The config to set. * @return This builder for chaining. @@ -1505,7 +1515,9 @@ public Builder setConfig(java.lang.String value) { * [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. * * - * string config = 2 [(.google.api.resource_reference) = { ... } + * + * string config = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * * * @return This builder for chaining. */ @@ -1525,7 +1537,9 @@ public Builder clearConfig() { * [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. * * - * string config = 2 [(.google.api.resource_reference) = { ... } + * + * string config = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * * * @param value The bytes for config to set. * @return This builder for chaining. @@ -1550,7 +1564,7 @@ public Builder setConfigBytes(com.google.protobuf.ByteString value) { * Must be unique per project and between 4 and 30 characters in length. * * - * string display_name = 3; + * string display_name = 3 [(.google.api.field_behavior) = REQUIRED]; * * @return The displayName. */ @@ -1573,7 +1587,7 @@ public java.lang.String getDisplayName() { * Must be unique per project and between 4 and 30 characters in length. * * - * string display_name = 3; + * string display_name = 3 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for displayName. */ @@ -1596,7 +1610,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { * Must be unique per project and between 4 and 30 characters in length. * * - * string display_name = 3; + * string display_name = 3 [(.google.api.field_behavior) = REQUIRED]; * * @param value The displayName to set. * @return This builder for chaining. @@ -1618,7 +1632,7 @@ public Builder setDisplayName(java.lang.String value) { * Must be unique per project and between 4 and 30 characters in length. * * - * string display_name = 3; + * string display_name = 3 [(.google.api.field_behavior) = REQUIRED]; * * @return This builder for chaining. */ @@ -1636,7 +1650,7 @@ public Builder clearDisplayName() { * Must be unique per project and between 4 and 30 characters in length. * * - * string display_name = 3; + * string display_name = 3 [(.google.api.field_behavior) = REQUIRED]; * * @param value The bytes for displayName to set. * @return This builder for chaining. 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 a41182efe90..450b7a99ddd 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 @@ -33,7 +33,7 @@ public interface InstanceOrBuilder * segment of the name must be between 2 and 64 characters in length. * * - * string name = 1; + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The name. */ @@ -48,7 +48,7 @@ public interface InstanceOrBuilder * segment of the name must be between 2 and 64 characters in length. * * - * string name = 1; + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for name. */ @@ -64,7 +64,9 @@ public interface InstanceOrBuilder * [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. * * - * string config = 2 [(.google.api.resource_reference) = { ... } + * + * string config = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * * * @return The config. */ @@ -79,7 +81,9 @@ public interface InstanceOrBuilder * [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. * * - * string config = 2 [(.google.api.resource_reference) = { ... } + * + * string config = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * * * @return The bytes for config. */ @@ -93,7 +97,7 @@ public interface InstanceOrBuilder * Must be unique per project and between 4 and 30 characters in length. * * - * string display_name = 3; + * string display_name = 3 [(.google.api.field_behavior) = REQUIRED]; * * @return The displayName. */ @@ -106,7 +110,7 @@ public interface InstanceOrBuilder * Must be unique per project and between 4 and 30 characters in length. * * - * string display_name = 3; + * string display_name = 3 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for displayName. */ 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 d0134d0cda7..dfe7849894e 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 @@ -117,120 +117,121 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "in.instance.v1.ReplicaInfo\022\026\n\016leader_opt" + "ions\030\004 \003(\t:`\352A]\n%spanner.googleapis.com/" + "InstanceConfig\0224projects/{project}/insta" - + "nceConfigs/{instance_config}\"\364\003\n\010Instanc" - + "e\022\014\n\004name\030\001 \001(\t\022:\n\006config\030\002 \001(\tB*\372A\'\n%sp" - + "anner.googleapis.com/InstanceConfig\022\024\n\014d" - + "isplay_name\030\003 \001(\t\022\022\n\nnode_count\030\005 \001(\005\022\030\n" - + "\020processing_units\030\t \001(\005\022D\n\005state\030\006 \001(\01620" - + ".google.spanner.admin.instance.v1.Instan" - + "ce.StateB\003\340A\003\022F\n\006labels\030\007 \003(\01326.google.s" - + "panner.admin.instance.v1.Instance.Labels" - + "Entry\022\025\n\rendpoint_uris\030\010 \003(\t\032-\n\013LabelsEn" - + "try\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"7\n\005S" - + "tate\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020" - + "\001\022\t\n\005READY\020\002:M\352AJ\n\037spanner.googleapis.co" - + "m/Instance\022\'projects/{project}/instances" - + "/{instance}\"\210\001\n\032ListInstanceConfigsReque" - + "st\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudresourc" - + "emanager.googleapis.com/Project\022\021\n\tpage_" - + "size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\"\202\001\n\033ListI" - + "nstanceConfigsResponse\022J\n\020instance_confi" - + "gs\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/In" - + "stanceConfig\"{\n\022GetInstanceRequest\0225\n\004na" - + "me\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com" - + "/Instance\022.\n\nfield_mask\030\002 \001(\0132\032.google.p" - + "rotobuf.FieldMask\"\271\001\n\025CreateInstanceRequ" + + "nceConfigs/{instance_config}\"\201\004\n\010Instanc" + + "e\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/InstanceCon" + + "fig\022\031\n\014display_name\030\003 \001(\tB\003\340A\002\022\022\n\nnode_c" + + "ount\030\005 \001(\005\022\030\n\020processing_units\030\t \001(\005\022D\n\005" + + "state\030\006 \001(\01620.google.spanner.admin.insta" + + "nce.v1.Instance.StateB\003\340A\003\022F\n\006labels\030\007 \003" + + "(\01326.google.spanner.admin.instance.v1.In" + + "stance.LabelsEntry\022\025\n\rendpoint_uris\030\010 \003(" + + "\t\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:M\352AJ\n\037spanner." + + "googleapis.com/Instance\022\'projects/{proje" + + "ct}/instances/{instance}\"\210\001\n\032ListInstanc" + + "eConfigsRequest\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n" + + "+cloudresourcemanager.googleapis.com/Pro" + + "ject\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030\003 " + + "\001(\t\"\202\001\n\033ListInstanceConfigsResponse\022J\n\020i" + + "nstance_configs\030\001 \003(\01320.google.spanner.a" + + "dmin.instance.v1.InstanceConfig\022\027\n\017next_" + + "page_token\030\002 \001(\t\"W\n\030GetInstanceConfigReq" + + "uest\022;\n\004name\030\001 \001(\tB-\340A\002\372A\'\n%spanner.goog" + + "leapis.com/InstanceConfig\"{\n\022GetInstance" + + "Request\0225\n\004name\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.g" + + "oogleapis.com/Instance\022.\n\nfield_mask\030\002 \001" + + "(\0132\032.google.protobuf.FieldMask\"\271\001\n\025Creat" + + "eInstanceRequest\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-" + + "\n+cloudresourcemanager.googleapis.com/Pr" + + "oject\022\030\n\013instance_id\030\002 \001(\tB\003\340A\002\022A\n\010insta" + + "nce\030\003 \001(\0132*.google.spanner.admin.instanc" + + "e.v1.InstanceB\003\340A\002\"\222\001\n\024ListInstancesRequ" + "est\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudresour" - + "cemanager.googleapis.com/Project\022\030\n\013inst" - + "ance_id\030\002 \001(\tB\003\340A\002\022A\n\010instance\030\003 \001(\0132*.g" + + "cemanager.googleapis.com/Project\022\021\n\tpage" + + "_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022\016\n\006filte" + + "r\030\004 \001(\t\"o\n\025ListInstancesResponse\022=\n\tinst" + + "ances\030\001 \003(\0132*.google.spanner.admin.insta" + + "nce.v1.Instance\022\027\n\017next_page_token\030\002 \001(\t" + + "\"\217\001\n\025UpdateInstanceRequest\022A\n\010instance\030\001" + + " \001(\0132*.google.spanner.admin.instance.v1." + + "InstanceB\003\340A\002\0223\n\nfield_mask\030\002 \001(\0132\032.goog" + + "le.protobuf.FieldMaskB\003\340A\002\"N\n\025DeleteInst" + + "anceRequest\0225\n\004name\030\001 \001(\tB\'\340A\002\372A!\n\037spann" + + "er.googleapis.com/Instance\"\345\001\n\026CreateIns" + + "tanceMetadata\022<\n\010instance\030\001 \001(\0132*.google" + + ".spanner.admin.instance.v1.Instance\022.\n\ns" + + "tart_time\030\002 \001(\0132\032.google.protobuf.Timest" + + "amp\022/\n\013cancel_time\030\003 \001(\0132\032.google.protob" + + "uf.Timestamp\022,\n\010end_time\030\004 \001(\0132\032.google." + + "protobuf.Timestamp\"\345\001\n\026UpdateInstanceMet" + + "adata\022<\n\010instance\030\001 \001(\0132*.google.spanner" + + ".admin.instance.v1.Instance\022.\n\nstart_tim" + + "e\030\002 \001(\0132\032.google.protobuf.Timestamp\022/\n\013c" + + "ancel_time\030\003 \001(\0132\032.google.protobuf.Times" + + "tamp\022,\n\010end_time\030\004 \001(\0132\032.google.protobuf" + + ".Timestamp2\277\020\n\rInstanceAdmin\022\314\001\n\023ListIns" + + "tanceConfigs\022<.google.spanner.admin.inst" + + "ance.v1.ListInstanceConfigsRequest\032=.goo" + + "gle.spanner.admin.instance.v1.ListInstan" + + "ceConfigsResponse\"8\202\323\344\223\002)\022\'/v1/{parent=p" + + "rojects/*}/instanceConfigs\332A\006parent\022\271\001\n\021" + + "GetInstanceConfig\022:.google.spanner.admin" + + ".instance.v1.GetInstanceConfigRequest\0320." + + "google.spanner.admin.instance.v1.Instanc" + + "eConfig\"6\202\323\344\223\002)\022\'/v1/{name=projects/*/in" + + "stanceConfigs/*}\332A\004name\022\264\001\n\rListInstance" + + "s\0226.google.spanner.admin.instance.v1.Lis" + + "tInstancesRequest\0327.google.spanner.admin" + + ".instance.v1.ListInstancesResponse\"2\202\323\344\223" + + "\002#\022!/v1/{parent=projects/*}/instances\332A\006" + + "parent\022\241\001\n\013GetInstance\0224.google.spanner." + + "admin.instance.v1.GetInstanceRequest\032*.g" + "oogle.spanner.admin.instance.v1.Instance" - + "B\003\340A\002\"\222\001\n\024ListInstancesRequest\022C\n\006parent" - + "\030\001 \001(\tB3\340A\002\372A-\n+cloudresourcemanager.goo" - + "gleapis.com/Project\022\021\n\tpage_size\030\002 \001(\005\022\022" - + "\n\npage_token\030\003 \001(\t\022\016\n\006filter\030\004 \001(\t\"o\n\025Li" - + "stInstancesResponse\022=\n\tinstances\030\001 \003(\0132*" - + ".google.spanner.admin.instance.v1.Instan" - + "ce\022\027\n\017next_page_token\030\002 \001(\t\"\217\001\n\025UpdateIn" - + "stanceRequest\022A\n\010instance\030\001 \001(\0132*.google" - + ".spanner.admin.instance.v1.InstanceB\003\340A\002" - + "\0223\n\nfield_mask\030\002 \001(\0132\032.google.protobuf.F" - + "ieldMaskB\003\340A\002\"N\n\025DeleteInstanceRequest\0225" - + "\n\004name\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis" - + ".com/Instance\"\345\001\n\026CreateInstanceMetadata" - + "\022<\n\010instance\030\001 \001(\0132*.google.spanner.admi" - + "n.instance.v1.Instance\022.\n\nstart_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.Time" - + "stamp\"\345\001\n\026UpdateInstanceMetadata\022<\n\010inst" - + "ance\030\001 \001(\0132*.google.spanner.admin.instan" - + "ce.v1.Instance\022.\n\nstart_time\030\002 \001(\0132\032.goo" - + "gle.protobuf.Timestamp\022/\n\013cancel_time\030\003 " - + "\001(\0132\032.google.protobuf.Timestamp\022,\n\010end_t" - + "ime\030\004 \001(\0132\032.google.protobuf.Timestamp2\277\020" - + "\n\rInstanceAdmin\022\314\001\n\023ListInstanceConfigs\022" - + "<.google.spanner.admin.instance.v1.ListI" - + "nstanceConfigsRequest\032=.google.spanner.a" - + "dmin.instance.v1.ListInstanceConfigsResp" - + "onse\"8\202\323\344\223\002)\022\'/v1/{parent=projects/*}/in" - + "stanceConfigs\332A\006parent\022\271\001\n\021GetInstanceCo" - + "nfig\022:.google.spanner.admin.instance.v1." - + "GetInstanceConfigRequest\0320.google.spanne" - + "r.admin.instance.v1.InstanceConfig\"6\202\323\344\223" - + "\002)\022\'/v1/{name=projects/*/instanceConfigs" - + "/*}\332A\004name\022\264\001\n\rListInstances\0226.google.sp" - + "anner.admin.instance.v1.ListInstancesReq" - + "uest\0327.google.spanner.admin.instance.v1." - + "ListInstancesResponse\"2\202\323\344\223\002#\022!/v1/{pare" - + "nt=projects/*}/instances\332A\006parent\022\241\001\n\013Ge" - + "tInstance\0224.google.spanner.admin.instanc" - + "e.v1.GetInstanceRequest\032*.google.spanner" - + ".admin.instance.v1.Instance\"0\202\323\344\223\002#\022!/v1" - + "/{name=projects/*/instances/*}\332A\004name\022\234\002" - + "\n\016CreateInstance\0227.google.spanner.admin." - + "instance.v1.CreateInstanceRequest\032\035.goog" - + "le.longrunning.Operation\"\261\001\202\323\344\223\002&\"!/v1/{" - + "parent=projects/*}/instances:\001*\332A\033parent" - + ",instance_id,instance\312Ad\n)google.spanner" - + ".admin.instance.v1.Instance\0227google.span" - + "ner.admin.instance.v1.CreateInstanceMeta" - + "data\022\235\002\n\016UpdateInstance\0227.google.spanner" - + ".admin.instance.v1.UpdateInstanceRequest" - + "\032\035.google.longrunning.Operation\"\262\001\202\323\344\223\002/" - + "2*/v1/{instance.name=projects/*/instance" - + "s/*}:\001*\332A\023instance,field_mask\312Ad\n)google" - + ".spanner.admin.instance.v1.Instance\0227goo" - + "gle.spanner.admin.instance.v1.UpdateInst" - + "anceMetadata\022\223\001\n\016DeleteInstance\0227.google" - + ".spanner.admin.instance.v1.DeleteInstanc" - + "eRequest\032\026.google.protobuf.Empty\"0\202\323\344\223\002#" - + "*!/v1/{name=projects/*/instances/*}\332A\004na" - + "me\022\232\001\n\014SetIamPolicy\022\".google.iam.v1.SetI" - + "amPolicyRequest\032\025.google.iam.v1.Policy\"O" - + "\202\323\344\223\0027\"2/v1/{resource=projects/*/instanc" - + "es/*}:setIamPolicy:\001*\332A\017resource,policy\022" - + "\223\001\n\014GetIamPolicy\022\".google.iam.v1.GetIamP" - + "olicyRequest\032\025.google.iam.v1.Policy\"H\202\323\344" - + "\223\0027\"2/v1/{resource=projects/*/instances/" - + "*}:getIamPolicy:\001*\332A\010resource\022\305\001\n\022TestIa" - + "mPermissions\022(.google.iam.v1.TestIamPerm" - + "issionsRequest\032).google.iam.v1.TestIamPe" - + "rmissionsResponse\"Z\202\323\344\223\002=\"8/v1/{resource" - + "=projects/*/instances/*}:testIamPermissi" - + "ons:\001*\332A\024resource,permissions\032x\312A\026spanne" - + "r.googleapis.com\322A\\https://www.googleapi" - + "s.com/auth/cloud-platform,https://www.go" - + "ogleapis.com/auth/spanner.adminB\215\002\n$com." - + "google.spanner.admin.instance.v1B\031Spanne" - + "rInstanceAdminProtoP\001ZHgoogle.golang.org" - + "/genproto/googleapis/spanner/admin/insta" - + "nce/v1;instance\252\002&Google.Cloud.Spanner.A" - + "dmin.Instance.V1\312\002&Google\\Cloud\\Spanner\\" - + "Admin\\Instance\\V1\352\002+Google::Cloud::Spann" - + "er::Admin::Instance::V1b\006proto3" + + "\"0\202\323\344\223\002#\022!/v1/{name=projects/*/instances" + + "/*}\332A\004name\022\234\002\n\016CreateInstance\0227.google.s" + + "panner.admin.instance.v1.CreateInstanceR" + + "equest\032\035.google.longrunning.Operation\"\261\001" + + "\202\323\344\223\002&\"!/v1/{parent=projects/*}/instance" + + "s:\001*\332A\033parent,instance_id,instance\312Ad\n)g" + + "oogle.spanner.admin.instance.v1.Instance" + + "\0227google.spanner.admin.instance.v1.Creat" + + "eInstanceMetadata\022\235\002\n\016UpdateInstance\0227.g" + + "oogle.spanner.admin.instance.v1.UpdateIn" + + "stanceRequest\032\035.google.longrunning.Opera" + + "tion\"\262\001\202\323\344\223\002/2*/v1/{instance.name=projec" + + "ts/*/instances/*}:\001*\332A\023instance,field_ma" + + "sk\312Ad\n)google.spanner.admin.instance.v1." + + "Instance\0227google.spanner.admin.instance." + + "v1.UpdateInstanceMetadata\022\223\001\n\016DeleteInst" + + "ance\0227.google.spanner.admin.instance.v1." + + "DeleteInstanceRequest\032\026.google.protobuf." + + "Empty\"0\202\323\344\223\002#*!/v1/{name=projects/*/inst" + + "ances/*}\332A\004name\022\232\001\n\014SetIamPolicy\022\".googl" + + "e.iam.v1.SetIamPolicyRequest\032\025.google.ia" + + "m.v1.Policy\"O\202\323\344\223\0027\"2/v1/{resource=proje" + + "cts/*/instances/*}:setIamPolicy:\001*\332A\017res" + + "ource,policy\022\223\001\n\014GetIamPolicy\022\".google.i" + + "am.v1.GetIamPolicyRequest\032\025.google.iam.v" + + "1.Policy\"H\202\323\344\223\0027\"2/v1/{resource=projects" + + "/*/instances/*}:getIamPolicy:\001*\332A\010resour" + + "ce\022\305\001\n\022TestIamPermissions\022(.google.iam.v" + + "1.TestIamPermissionsRequest\032).google.iam" + + ".v1.TestIamPermissionsResponse\"Z\202\323\344\223\002=\"8" + + "/v1/{resource=projects/*/instances/*}:te" + + "stIamPermissions:\001*\332A\024resource,permissio" + + "ns\032x\312A\026spanner.googleapis.com\322A\\https://" + + "www.googleapis.com/auth/cloud-platform,h" + + "ttps://www.googleapis.com/auth/spanner.a" + + "dminB\215\002\n$com.google.spanner.admin.instan" + + "ce.v1B\031SpannerInstanceAdminProtoP\001ZHgoog" + + "le.golang.org/genproto/googleapis/spanne" + + "r/admin/instance/v1;instance\252\002&Google.Cl" + + "oud.Spanner.Admin.Instance.V1\312\002&Google\\C" + + "loud\\Spanner\\Admin\\Instance\\V1\352\002+Google:" + + ":Cloud::Spanner::Admin::Instance::V1b\006pr" + + "oto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( 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 de86f26865e..0e6bf63feb0 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 @@ -350,19 +350,22 @@ message Instance { // after the instance is created. Values are of the form // `projects//instances/[a-z][-a-z0-9]*[a-z0-9]`. The final // segment of the name must be between 2 and 64 characters in length. - string name = 1; + string name = 1 [(google.api.field_behavior) = REQUIRED]; // Required. The name of the instance's configuration. Values are of the form // `projects//instanceConfigs/`. See // also [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig] and // [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]. - string config = 2 [(google.api.resource_reference) = { - type: "spanner.googleapis.com/InstanceConfig" - }]; + string config = 2 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "spanner.googleapis.com/InstanceConfig" + } + ]; // Required. The descriptive name for this instance as it appears in UIs. // Must be unique per project and between 4 and 30 characters in length. - string display_name = 3; + string display_name = 3 [(google.api.field_behavior) = REQUIRED]; // Required. The number of nodes allocated to this instance. This may be zero // in API responses for instances that are not yet in state `READY`. diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml index bb13dad08c5..17afdb68250 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.20.0 + 6.21.0 proto-google-cloud-spanner-v1 PROTO library for proto-google-cloud-spanner-v1 com.google.cloud google-cloud-spanner-parent - 6.20.0 + 6.21.0 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 e0d65d159ab..4e32e35449f 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 @@ -185,10 +185,10 @@ public com.google.protobuf.ByteString getDatabaseBytes() { * * *

-   * The session to create.
+   * Required. The session to create.
    * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; * * @return Whether the session field is set. */ @@ -200,10 +200,10 @@ public boolean hasSession() { * * *
-   * The session to create.
+   * Required. The session to create.
    * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; * * @return The session. */ @@ -215,10 +215,10 @@ public com.google.spanner.v1.Session getSession() { * * *
-   * The session to create.
+   * Required. The session to create.
    * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; */ @java.lang.Override public com.google.spanner.v1.SessionOrBuilder getSessionOrBuilder() { @@ -695,10 +695,11 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { * * *
-     * The session to create.
+     * Required. The session to create.
      * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * * * @return Whether the session field is set. */ @@ -709,10 +710,11 @@ public boolean hasSession() { * * *
-     * The session to create.
+     * Required. The session to create.
      * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * * * @return The session. */ @@ -727,10 +729,11 @@ public com.google.spanner.v1.Session getSession() { * * *
-     * The session to create.
+     * Required. The session to create.
      * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public Builder setSession(com.google.spanner.v1.Session value) { if (sessionBuilder_ == null) { @@ -749,10 +752,11 @@ public Builder setSession(com.google.spanner.v1.Session value) { * * *
-     * The session to create.
+     * Required. The session to create.
      * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public Builder setSession(com.google.spanner.v1.Session.Builder builderForValue) { if (sessionBuilder_ == null) { @@ -768,10 +772,11 @@ public Builder setSession(com.google.spanner.v1.Session.Builder builderForValue) * * *
-     * The session to create.
+     * Required. The session to create.
      * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public Builder mergeSession(com.google.spanner.v1.Session value) { if (sessionBuilder_ == null) { @@ -792,10 +797,11 @@ public Builder mergeSession(com.google.spanner.v1.Session value) { * * *
-     * The session to create.
+     * Required. The session to create.
      * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public Builder clearSession() { if (sessionBuilder_ == null) { @@ -812,10 +818,11 @@ public Builder clearSession() { * * *
-     * The session to create.
+     * Required. The session to create.
      * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public com.google.spanner.v1.Session.Builder getSessionBuilder() { @@ -826,10 +833,11 @@ public com.google.spanner.v1.Session.Builder getSessionBuilder() { * * *
-     * The session to create.
+     * Required. The session to create.
      * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public com.google.spanner.v1.SessionOrBuilder getSessionOrBuilder() { if (sessionBuilder_ != null) { @@ -842,10 +850,11 @@ public com.google.spanner.v1.SessionOrBuilder getSessionOrBuilder() { * * *
-     * The session to create.
+     * Required. The session to create.
      * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ private com.google.protobuf.SingleFieldBuilderV3< com.google.spanner.v1.Session, 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 3966d85f952..e6e69132e6f 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 @@ -56,10 +56,10 @@ public interface CreateSessionRequestOrBuilder * * *
-   * The session to create.
+   * Required. The session to create.
    * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; * * @return Whether the session field is set. */ @@ -68,10 +68,10 @@ public interface CreateSessionRequestOrBuilder * * *
-   * The session to create.
+   * Required. The session to create.
    * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; * * @return The session. */ @@ -80,10 +80,10 @@ public interface CreateSessionRequestOrBuilder * * *
-   * The session to create.
+   * Required. The session to create.
    * 
* - * .google.spanner.v1.Session session = 2; + * .google.spanner.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; */ com.google.spanner.v1.SessionOrBuilder getSessionOrBuilder(); } 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 8e70092a3c9..9d5558673f0 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 @@ -179,7 +179,7 @@ public interface StatementOrBuilder * Required. The DML string. * * - * string sql = 1; + * string sql = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The sql. */ @@ -191,7 +191,7 @@ public interface StatementOrBuilder * Required. The DML string. * * - * string sql = 1; + * string sql = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for sql. */ @@ -482,7 +482,7 @@ protected com.google.protobuf.MapField internalGetMapField(int number) { * Required. The DML string. * * - * string sql = 1; + * string sql = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The sql. */ @@ -505,7 +505,7 @@ public java.lang.String getSql() { * Required. The DML string. * * - * string sql = 1; + * string sql = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for sql. */ @@ -1121,7 +1121,7 @@ public Builder mergeFrom( * Required. The DML string. * * - * string sql = 1; + * string sql = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The sql. */ @@ -1143,7 +1143,7 @@ public java.lang.String getSql() { * Required. The DML string. * * - * string sql = 1; + * string sql = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for sql. */ @@ -1165,7 +1165,7 @@ public com.google.protobuf.ByteString getSqlBytes() { * Required. The DML string. * * - * string sql = 1; + * string sql = 1 [(.google.api.field_behavior) = REQUIRED]; * * @param value The sql to set. * @return This builder for chaining. @@ -1186,7 +1186,7 @@ public Builder setSql(java.lang.String value) { * Required. The DML string. * * - * string sql = 1; + * string sql = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return This builder for chaining. */ @@ -1203,7 +1203,7 @@ public Builder clearSql() { * Required. The DML string. * * - * string sql = 1; + * string sql = 1 [(.google.api.field_behavior) = REQUIRED]; * * @param value The bytes for sql to set. * @return This builder for chaining. 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 779b3413e4d..b06d7426160 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 @@ -195,7 +195,7 @@ public interface WriteOrBuilder * Required. The table whose rows will be written. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The table. */ @@ -207,7 +207,7 @@ public interface WriteOrBuilder * Required. The table whose rows will be written. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for table. */ @@ -494,7 +494,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { * Required. The table whose rows will be written. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The table. */ @@ -517,7 +517,7 @@ public java.lang.String getTable() { * Required. The table whose rows will be written. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for table. */ @@ -1130,7 +1130,7 @@ public Builder mergeFrom( * Required. The table whose rows will be written. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The table. */ @@ -1152,7 +1152,7 @@ public java.lang.String getTable() { * Required. The table whose rows will be written. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for table. */ @@ -1174,7 +1174,7 @@ public com.google.protobuf.ByteString getTableBytes() { * Required. The table whose rows will be written. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @param value The table to set. * @return This builder for chaining. @@ -1195,7 +1195,7 @@ public Builder setTable(java.lang.String value) { * Required. The table whose rows will be written. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return This builder for chaining. */ @@ -1212,7 +1212,7 @@ public Builder clearTable() { * Required. The table whose rows will be written. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @param value The bytes for table to set. * @return This builder for chaining. @@ -1959,7 +1959,7 @@ public interface DeleteOrBuilder * Required. The table whose rows will be deleted. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The table. */ @@ -1971,7 +1971,7 @@ public interface DeleteOrBuilder * Required. The table whose rows will be deleted. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for table. */ @@ -1989,7 +1989,7 @@ public interface DeleteOrBuilder * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; * * @return Whether the keySet field is set. */ @@ -2006,7 +2006,7 @@ public interface DeleteOrBuilder * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; * * @return The keySet. */ @@ -2023,7 +2023,7 @@ public interface DeleteOrBuilder * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; */ com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder(); } @@ -2144,7 +2144,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { * Required. The table whose rows will be deleted. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The table. */ @@ -2167,7 +2167,7 @@ public java.lang.String getTable() { * Required. The table whose rows will be deleted. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for table. */ @@ -2198,7 +2198,7 @@ public com.google.protobuf.ByteString getTableBytes() { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; * * @return Whether the keySet field is set. */ @@ -2218,7 +2218,7 @@ public boolean hasKeySet() { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; * * @return The keySet. */ @@ -2238,7 +2238,7 @@ public com.google.spanner.v1.KeySet getKeySet() { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; */ @java.lang.Override public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { @@ -2600,7 +2600,7 @@ public Builder mergeFrom( * Required. The table whose rows will be deleted. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The table. */ @@ -2622,7 +2622,7 @@ public java.lang.String getTable() { * Required. The table whose rows will be deleted. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return The bytes for table. */ @@ -2644,7 +2644,7 @@ public com.google.protobuf.ByteString getTableBytes() { * Required. The table whose rows will be deleted. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @param value The table to set. * @return This builder for chaining. @@ -2665,7 +2665,7 @@ public Builder setTable(java.lang.String value) { * Required. The table whose rows will be deleted. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @return This builder for chaining. */ @@ -2682,7 +2682,7 @@ public Builder clearTable() { * Required. The table whose rows will be deleted. * * - * string table = 1; + * string table = 1 [(.google.api.field_behavior) = REQUIRED]; * * @param value The bytes for table to set. * @return This builder for chaining. @@ -2716,7 +2716,8 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; + * * * @return Whether the keySet field is set. */ @@ -2735,7 +2736,8 @@ public boolean hasKeySet() { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; + * * * @return The keySet. */ @@ -2758,7 +2760,8 @@ public com.google.spanner.v1.KeySet getKeySet() { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public Builder setKeySet(com.google.spanner.v1.KeySet value) { if (keySetBuilder_ == null) { @@ -2785,7 +2788,8 @@ public Builder setKeySet(com.google.spanner.v1.KeySet value) { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { if (keySetBuilder_ == null) { @@ -2809,7 +2813,8 @@ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { if (keySetBuilder_ == null) { @@ -2838,7 +2843,8 @@ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public Builder clearKeySet() { if (keySetBuilder_ == null) { @@ -2863,7 +2869,8 @@ public Builder clearKeySet() { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { @@ -2882,7 +2889,8 @@ public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { if (keySetBuilder_ != null) { @@ -2903,7 +2911,8 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { * rows do not exist. * * - * .google.spanner.v1.KeySet key_set = 2; + * .google.spanner.v1.KeySet key_set = 2 [(.google.api.field_behavior) = REQUIRED]; + * */ private com.google.protobuf.SingleFieldBuilderV3< com.google.spanner.v1.KeySet, 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 f7e439f86f0..faf23ffff0a 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 @@ -50,30 +50,32 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { java.lang.String[] descriptorData = { "\n google/spanner/v1/mutation.proto\022\021goog" + "le.spanner.v1\032\034google/api/annotations.pr" - + "oto\032\034google/protobuf/struct.proto\032\034googl" - + "e/spanner/v1/keys.proto\"\306\003\n\010Mutation\0223\n\006" - + "insert\030\001 \001(\0132!.google.spanner.v1.Mutatio" - + "n.WriteH\000\0223\n\006update\030\002 \001(\0132!.google.spann" - + "er.v1.Mutation.WriteH\000\022=\n\020insert_or_upda" - + "te\030\003 \001(\0132!.google.spanner.v1.Mutation.Wr" - + "iteH\000\0224\n\007replace\030\004 \001(\0132!.google.spanner." - + "v1.Mutation.WriteH\000\0224\n\006delete\030\005 \001(\0132\".go" - + "ogle.spanner.v1.Mutation.DeleteH\000\032S\n\005Wri" - + "te\022\r\n\005table\030\001 \001(\t\022\017\n\007columns\030\002 \003(\t\022*\n\006va" - + "lues\030\003 \003(\0132\032.google.protobuf.ListValue\032C" - + "\n\006Delete\022\r\n\005table\030\001 \001(\t\022*\n\007key_set\030\002 \001(\013" - + "2\031.google.spanner.v1.KeySetB\013\n\toperation" - + "B\263\001\n\025com.google.spanner.v1B\rMutationProt" - + "oP\001Z8google.golang.org/genproto/googleap" - + "is/spanner/v1;spanner\252\002\027Google.Cloud.Spa" - + "nner.V1\312\002\027Google\\Cloud\\Spanner\\V1\352\002\032Goog" - + "le::Cloud::Spanner::V1b\006proto3" + + "oto\032\037google/api/field_behavior.proto\032\034go" + + "ogle/protobuf/struct.proto\032\034google/spann" + + "er/v1/keys.proto\"\325\003\n\010Mutation\0223\n\006insert\030" + + "\001 \001(\0132!.google.spanner.v1.Mutation.Write" + + "H\000\0223\n\006update\030\002 \001(\0132!.google.spanner.v1.M" + + "utation.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.Muta" + + "tion.WriteH\000\0224\n\006delete\030\005 \001(\0132\".google.sp" + + "anner.v1.Mutation.DeleteH\000\032X\n\005Write\022\022\n\005t" + + "able\030\001 \001(\tB\003\340A\002\022\017\n\007columns\030\002 \003(\t\022*\n\006valu" + + "es\030\003 \003(\0132\032.google.protobuf.ListValue\032M\n\006" + + "Delete\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\002B\013\n\to" + + "perationB\263\001\n\025com.google.spanner.v1B\rMuta" + + "tionProtoP\001Z8google.golang.org/genproto/" + + "googleapis/spanner/v1;spanner\252\002\027Google.C" + + "loud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\V" + + "1\352\002\032Google::Cloud::Spanner::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { com.google.api.AnnotationsProto.getDescriptor(), + com.google.api.FieldBehaviorProto.getDescriptor(), com.google.protobuf.StructProto.getDescriptor(), com.google.spanner.v1.KeysProto.getDescriptor(), }); @@ -101,7 +103,13 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new java.lang.String[] { "Table", "KeySet", }); + 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.AnnotationsProto.getDescriptor(); + com.google.api.FieldBehaviorProto.getDescriptor(); com.google.protobuf.StructProto.getDescriptor(); com.google.spanner.v1.KeysProto.getDescriptor(); } 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 3fbfef6ea9a..440f749d535 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 @@ -156,204 +156,204 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "gle/spanner/v1/mutation.proto\032\"google/sp" + "anner/v1/result_set.proto\032#google/spanne" + "r/v1/transaction.proto\032\034google/spanner/v" - + "1/type.proto\"~\n\024CreateSessionRequest\0229\n\010" - + "database\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleap" - + "is.com/Database\022+\n\007session\030\002 \001(\0132\032.googl" - + "e.spanner.v1.Session\"\251\001\n\032BatchCreateSess" - + "ionsRequest\0229\n\010database\030\001 \001(\tB\'\340A\002\372A!\n\037s" - + "panner.googleapis.com/Database\0224\n\020sessio" - + "n_template\030\002 \001(\0132\032.google.spanner.v1.Ses" - + "sion\022\032\n\rsession_count\030\003 \001(\005B\003\340A\002\"J\n\033Batc" - + "hCreateSessionsResponse\022+\n\007session\030\001 \003(\013" - + "2\032.google.spanner.v1.Session\"\363\002\n\007Session" - + "\022\021\n\004name\030\001 \001(\tB\003\340A\003\0226\n\006labels\030\002 \003(\0132&.go" - + "ogle.spanner.v1.Session.LabelsEntry\0224\n\013c" - + "reate_time\030\003 \001(\0132\032.google.protobuf.Times" - + "tampB\003\340A\003\022B\n\031approximate_last_use_time\030\004" - + " \001(\0132\032.google.protobuf.TimestampB\003\340A\003\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/Sessio" - + "n\022Oprojects/{project}/instances/{instanc" - + "e}/databases/{database}/sessions/{sessio" - + "n}\"I\n\021GetSessionRequest\0224\n\004name\030\001 \001(\tB&\340" - + "A\002\372A \n\036spanner.googleapis.com/Session\"\207\001" - + "\n\023ListSessionsRequest\0229\n\010database\030\001 \001(\tB" - + "\'\340A\002\372A!\n\037spanner.googleapis.com/Database" - + "\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022" - + "\016\n\006filter\030\004 \001(\t\"]\n\024ListSessionsResponse\022" - + ",\n\010sessions\030\001 \003(\0132\032.google.spanner.v1.Se" - + "ssion\022\027\n\017next_page_token\030\002 \001(\t\"L\n\024Delete" - + "SessionRequest\0224\n\004name\030\001 \001(\tB&\340A\002\372A \n\036sp" - + "anner.googleapis.com/Session\"\334\001\n\016Request" - + "Options\022<\n\010priority\030\001 \001(\0162*.google.spann" - + "er.v1.RequestOptions.Priority\022\023\n\013request" - + "_tag\030\002 \001(\t\022\027\n\017transaction_tag\030\003 \001(\t\"^\n\010P" - + "riority\022\030\n\024PRIORITY_UNSPECIFIED\020\000\022\020\n\014PRI" - + "ORITY_LOW\020\001\022\023\n\017PRIORITY_MEDIUM\020\002\022\021\n\rPRIO" - + "RITY_HIGH\020\003\"\344\005\n\021ExecuteSqlRequest\0227\n\007ses" - + "sion\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis.c" - + "om/Session\022;\n\013transaction\030\002 \001(\0132&.google" - + ".spanner.v1.TransactionSelector\022\020\n\003sql\030\003" - + " \001(\tB\003\340A\002\022\'\n\006params\030\004 \001(\0132\027.google.proto" - + "buf.Struct\022I\n\013param_types\030\005 \003(\01324.google" - + ".spanner.v1.ExecuteSqlRequest.ParamTypes" - + "Entry\022\024\n\014resume_token\030\006 \001(\014\022B\n\nquery_mod" - + "e\030\007 \001(\0162..google.spanner.v1.ExecuteSqlRe" - + "quest.QueryMode\022\027\n\017partition_token\030\010 \001(\014" - + "\022\r\n\005seqno\030\t \001(\003\022H\n\rquery_options\030\n \001(\01321" - + ".google.spanner.v1.ExecuteSqlRequest.Que" - + "ryOptions\022:\n\017request_options\030\013 \001(\0132!.goo" - + "gle.spanner.v1.RequestOptions\032O\n\014QueryOp" - + "tions\022\031\n\021optimizer_version\030\001 \001(\t\022$\n\034opti" - + "mizer_statistics_package\030\002 \001(\t\032J\n\017ParamT" - + "ypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027." - + "google.spanner.v1.Type:\0028\001\".\n\tQueryMode\022" - + "\n\n\006NORMAL\020\000\022\010\n\004PLAN\020\001\022\013\n\007PROFILE\020\002\"\233\004\n\026E" - + "xecuteBatchDmlRequest\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." - + "TransactionSelectorB\003\340A\002\022L\n\nstatements\030\003" - + " \003(\01323.google.spanner.v1.ExecuteBatchDml" - + "Request.StatementB\003\340A\002\022\022\n\005seqno\030\004 \001(\003B\003\340" - + "A\002\022:\n\017request_options\030\005 \001(\0132!.google.spa" - + "nner.v1.RequestOptions\032\347\001\n\tStatement\022\013\n\003" - + "sql\030\001 \001(\t\022\'\n\006params\030\002 \001(\0132\027.google.proto" - + "buf.Struct\022X\n\013param_types\030\003 \003(\0132C.google" - + ".spanner.v1.ExecuteBatchDmlRequest.State" - + "ment.ParamTypesEntry\032J\n\017ParamTypesEntry\022" - + "\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.google.spa" - + "nner.v1.Type:\0028\001\"p\n\027ExecuteBatchDmlRespo" - + "nse\0221\n\013result_sets\030\001 \003(\0132\034.google.spanne" - + "r.v1.ResultSet\022\"\n\006status\030\002 \001(\0132\022.google." - + "rpc.Status\"H\n\020PartitionOptions\022\034\n\024partit" - + "ion_size_bytes\030\001 \001(\003\022\026\n\016max_partitions\030\002" - + " \001(\003\"\243\003\n\025PartitionQueryRequest\0227\n\007sessio" - + "n\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis.com/" - + "Session\022;\n\013transaction\030\002 \001(\0132&.google.sp" - + "anner.v1.TransactionSelector\022\020\n\003sql\030\003 \001(" - + "\tB\003\340A\002\022\'\n\006params\030\004 \001(\0132\027.google.protobuf" - + ".Struct\022M\n\013param_types\030\005 \003(\01328.google.sp" - + "anner.v1.PartitionQueryRequest.ParamType" - + "sEntry\022>\n\021partition_options\030\006 \001(\0132#.goog" - + "le.spanner.v1.PartitionOptions\032J\n\017ParamT" - + "ypesEntry\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\024Partition" - + "ReadRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036sp" - + "anner.googleapis.com/Session\022;\n\013transact" - + "ion\030\002 \001(\0132&.google.spanner.v1.Transactio" - + "nSelector\022\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\021partit" - + "ion_options\030\t \001(\0132#.google.spanner.v1.Pa" - + "rtitionOptions\"$\n\tPartition\022\027\n\017partition" - + "_token\030\001 \001(\014\"z\n\021PartitionResponse\0220\n\npar" - + "titions\030\001 \003(\0132\034.google.spanner.v1.Partit" - + "ion\0223\n\013transaction\030\002 \001(\0132\036.google.spanne" - + "r.v1.Transaction\"\347\002\n\013ReadRequest\0227\n\007sess" - + "ion\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis.co" - + "m/Session\022;\n\013transaction\030\002 \001(\0132&.google." - + "spanner.v1.TransactionSelector\022\022\n\005table\030" - + "\003 \001(\tB\003\340A\002\022\r\n\005index\030\004 \001(\t\022\024\n\007columns\030\005 \003" - + "(\tB\003\340A\002\022/\n\007key_set\030\006 \001(\0132\031.google.spanne" - + "r.v1.KeySetB\003\340A\002\022\r\n\005limit\030\010 \001(\003\022\024\n\014resum" - + "e_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\"\313\001\n\027BeginTransactionR" - + "equest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner" - + ".googleapis.com/Session\022;\n\007options\030\002 \001(\013" - + "2%.google.spanner.v1.TransactionOptionsB" - + "\003\340A\002\022:\n\017request_options\030\003 \001(\0132!.google.s" - + "panner.v1.RequestOptions\"\303\002\n\rCommitReque" - + "st\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.goo" - + "gleapis.com/Session\022\030\n\016transaction_id\030\002 " - + "\001(\014H\000\022G\n\026single_use_transaction\030\003 \001(\0132%." - + "google.spanner.v1.TransactionOptionsH\000\022." - + "\n\tmutations\030\004 \003(\0132\033.google.spanner.v1.Mu" - + "tation\022\033\n\023return_commit_stats\030\005 \001(\010\022:\n\017r" - + "equest_options\030\006 \001(\0132!.google.spanner.v1" - + ".RequestOptionsB\r\n\013transaction\"g\n\017Rollba" - + "ckRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036span" - + "ner.googleapis.com/Session\022\033\n\016transactio" - + "n_id\030\002 \001(\014B\003\340A\0022\300\026\n\007Spanner\022\246\001\n\rCreateSe" - + "ssion\022\'.google.spanner.v1.CreateSessionR" - + "equest\032\032.google.spanner.v1.Session\"P\202\323\344\223" - + "\002?\":/v1/{database=projects/*/instances/*" - + "/databases/*}/sessions:\001*\332A\010database\022\340\001\n" - + "\023BatchCreateSessions\022-.google.spanner.v1" - + ".BatchCreateSessionsRequest\032..google.spa" - + "nner.v1.BatchCreateSessionsResponse\"j\202\323\344" - + "\223\002K\"F/v1/{database=projects/*/instances/" - + "*/databases/*}/sessions:batchCreate:\001*\332A" - + "\026database,session_count\022\227\001\n\nGetSession\022$" - + ".google.spanner.v1.GetSessionRequest\032\032.g" - + "oogle.spanner.v1.Session\"G\202\323\344\223\002:\0228/v1/{n" - + "ame=projects/*/instances/*/databases/*/s" - + "essions/*}\332A\004name\022\256\001\n\014ListSessions\022&.goo" - + "gle.spanner.v1.ListSessionsRequest\032\'.goo" - + "gle.spanner.v1.ListSessionsResponse\"M\202\323\344" - + "\223\002<\022:/v1/{database=projects/*/instances/" - + "*/databases/*}/sessions\332A\010database\022\231\001\n\rD" - + "eleteSession\022\'.google.spanner.v1.DeleteS" - + "essionRequest\032\026.google.protobuf.Empty\"G\202" - + "\323\344\223\002:*8/v1/{name=projects/*/instances/*/" - + "databases/*/sessions/*}\332A\004name\022\243\001\n\nExecu" - + "teSql\022$.google.spanner.v1.ExecuteSqlRequ" - + "est\032\034.google.spanner.v1.ResultSet\"Q\202\323\344\223\002" - + "K\"F/v1/{session=projects/*/instances/*/d" - + "atabases/*/sessions/*}:executeSql:\001*\022\276\001\n" - + "\023ExecuteStreamingSql\022$.google.spanner.v1" - + ".ExecuteSqlRequest\032#.google.spanner.v1.P" - + "artialResultSet\"Z\202\323\344\223\002T\"O/v1/{session=pr" - + "ojects/*/instances/*/databases/*/session" - + "s/*}:executeStreamingSql:\001*0\001\022\300\001\n\017Execut" - + "eBatchDml\022).google.spanner.v1.ExecuteBat" - + "chDmlRequest\032*.google.spanner.v1.Execute" - + "BatchDmlResponse\"V\202\323\344\223\002P\"K/v1/{session=p" - + "rojects/*/instances/*/databases/*/sessio" - + "ns/*}:executeBatchDml:\001*\022\221\001\n\004Read\022\036.goog" - + "le.spanner.v1.ReadRequest\032\034.google.spann" - + "er.v1.ResultSet\"K\202\323\344\223\002E\"@/v1/{session=pr" + + "1/type.proto\"\203\001\n\024CreateSessionRequest\0229\n" + + "\010database\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googlea" + + "pis.com/Database\0220\n\007session\030\002 \001(\0132\032.goog" + + "le.spanner.v1.SessionB\003\340A\002\"\251\001\n\032BatchCrea" + + "teSessionsRequest\0229\n\010database\030\001 \001(\tB\'\340A\002" + + "\372A!\n\037spanner.googleapis.com/Database\0224\n\020" + + "session_template\030\002 \001(\0132\032.google.spanner." + + "v1.Session\022\032\n\rsession_count\030\003 \001(\005B\003\340A\002\"J" + + "\n\033BatchCreateSessionsResponse\022+\n\007session" + + "\030\001 \003(\0132\032.google.spanner.v1.Session\"\363\002\n\007S" + + "ession\022\021\n\004name\030\001 \001(\tB\003\340A\003\0226\n\006labels\030\002 \003(" + + "\0132&.google.spanner.v1.Session.LabelsEntr" + + "y\0224\n\013create_time\030\003 \001(\0132\032.google.protobuf" + + ".TimestampB\003\340A\003\022B\n\031approximate_last_use_" + + "time\030\004 \001(\0132\032.google.protobuf.TimestampB\003" + + "\340A\003\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\"\344\005\n\021ExecuteSqlRequest\022" + + "7\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.google" + + "apis.com/Session\022;\n\013transaction\030\002 \001(\0132&." + + "google.spanner.v1.TransactionSelector\022\020\n" + + "\003sql\030\003 \001(\tB\003\340A\002\022\'\n\006params\030\004 \001(\0132\027.google" + + ".protobuf.Struct\022I\n\013param_types\030\005 \003(\01324." + + "google.spanner.v1.ExecuteSqlRequest.Para" + + "mTypesEntry\022\024\n\014resume_token\030\006 \001(\014\022B\n\nque" + + "ry_mode\030\007 \001(\0162..google.spanner.v1.Execut" + + "eSqlRequest.QueryMode\022\027\n\017partition_token" + + "\030\010 \001(\014\022\r\n\005seqno\030\t \001(\003\022H\n\rquery_options\030\n" + + " \001(\01321.google.spanner.v1.ExecuteSqlReque" + + "st.QueryOptions\022:\n\017request_options\030\013 \001(\013" + + "2!.google.spanner.v1.RequestOptions\032O\n\014Q" + + "ueryOptions\022\031\n\021optimizer_version\030\001 \001(\t\022$" + + "\n\034optimizer_statistics_package\030\002 \001(\t\032J\n\017" + + "ParamTypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 " + + "\001(\0132\027.google.spanner.v1.Type:\0028\001\".\n\tQuer" + + "yMode\022\n\n\006NORMAL\020\000\022\010\n\004PLAN\020\001\022\013\n\007PROFILE\020\002" + + "\"\240\004\n\026ExecuteBatchDmlRequest\0227\n\007session\030\001" + + " \001(\tB&\340A\002\372A \n\036spanner.googleapis.com/Ses" + + "sion\022@\n\013transaction\030\002 \001(\0132&.google.spann" + + "er.v1.TransactionSelectorB\003\340A\002\022L\n\nstatem" + + "ents\030\003 \003(\01323.google.spanner.v1.ExecuteBa" + + "tchDmlRequest.StatementB\003\340A\002\022\022\n\005seqno\030\004 " + + "\001(\003B\003\340A\002\022:\n\017request_options\030\005 \001(\0132!.goog" + + "le.spanner.v1.RequestOptions\032\354\001\n\tStateme" + + "nt\022\020\n\003sql\030\001 \001(\tB\003\340A\002\022\'\n\006params\030\002 \001(\0132\027.g" + + "oogle.protobuf.Struct\022X\n\013param_types\030\003 \003" + + "(\0132C.google.spanner.v1.ExecuteBatchDmlRe" + + "quest.Statement.ParamTypesEntry\032J\n\017Param" + + "TypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027" + + ".google.spanner.v1.Type:\0028\001\"p\n\027ExecuteBa" + + "tchDmlResponse\0221\n\013result_sets\030\001 \003(\0132\034.go" + + "ogle.spanner.v1.ResultSet\022\"\n\006status\030\002 \001(" + + "\0132\022.google.rpc.Status\"H\n\020PartitionOption" + + "s\022\034\n\024partition_size_bytes\030\001 \001(\003\022\026\n\016max_p" + + "artitions\030\002 \001(\003\"\243\003\n\025PartitionQueryReques" + + "t\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.goog" + + "leapis.com/Session\022;\n\013transaction\030\002 \001(\0132" + + "&.google.spanner.v1.TransactionSelector\022" + + "\020\n\003sql\030\003 \001(\tB\003\340A\002\022\'\n\006params\030\004 \001(\0132\027.goog" + + "le.protobuf.Struct\022M\n\013param_types\030\005 \003(\0132" + + "8.google.spanner.v1.PartitionQueryReques" + + "t.ParamTypesEntry\022>\n\021partition_options\030\006" + + " \001(\0132#.google.spanner.v1.PartitionOption" + + "s\032J\n\017ParamTypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005val" + + "ue\030\002 \001(\0132\027.google.spanner.v1.Type:\0028\001\"\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.sp" + + "anner.v1.PartitionOptions\"$\n\tPartition\022\027" + + "\n\017partition_token\030\001 \001(\014\"z\n\021PartitionResp" + + "onse\0220\n\npartitions\030\001 \003(\0132\034.google.spanne" + + "r.v1.Partition\0223\n\013transaction\030\002 \001(\0132\036.go" + + "ogle.spanner.v1.Transaction\"\347\002\n\013ReadRequ" + + "est\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.go" + + "ogleapis.com/Session\022;\n\013transaction\030\002 \001(" + + "\0132&.google.spanner.v1.TransactionSelecto" + + "r\022\022\n\005table\030\003 \001(\tB\003\340A\002\022\r\n\005index\030\004 \001(\t\022\024\n\007" + + "columns\030\005 \003(\tB\003\340A\002\022/\n\007key_set\030\006 \001(\0132\031.go" + + "ogle.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_to" + + "ken\030\n \001(\014\022:\n\017request_options\030\013 \001(\0132!.goo" + + "gle.spanner.v1.RequestOptions\"\313\001\n\027BeginT" + + "ransactionRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372" + + "A \n\036spanner.googleapis.com/Session\022;\n\007op" + + "tions\030\002 \001(\0132%.google.spanner.v1.Transact" + + "ionOptionsB\003\340A\002\022:\n\017request_options\030\003 \001(\013" + + "2!.google.spanner.v1.RequestOptions\"\303\002\n\r" + + "CommitRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036" + + "spanner.googleapis.com/Session\022\030\n\016transa" + + "ction_id\030\002 \001(\014H\000\022G\n\026single_use_transacti" + + "on\030\003 \001(\0132%.google.spanner.v1.Transaction" + + "OptionsH\000\022.\n\tmutations\030\004 \003(\0132\033.google.sp" + + "anner.v1.Mutation\022\033\n\023return_commit_stats" + + "\030\005 \001(\010\022:\n\017request_options\030\006 \001(\0132!.google" + + ".spanner.v1.RequestOptionsB\r\n\013transactio" + + "n\"g\n\017RollbackRequest\0227\n\007session\030\001 \001(\tB&\340" + + "A\002\372A \n\036spanner.googleapis.com/Session\022\033\n" + + "\016transaction_id\030\002 \001(\014B\003\340A\0022\300\026\n\007Spanner\022\246" + + "\001\n\rCreateSession\022\'.google.spanner.v1.Cre" + + "ateSessionRequest\032\032.google.spanner.v1.Se" + + "ssion\"P\202\323\344\223\002?\":/v1/{database=projects/*/" + + "instances/*/databases/*}/sessions:\001*\332A\010d" + + "atabase\022\340\001\n\023BatchCreateSessions\022-.google" + + ".spanner.v1.BatchCreateSessionsRequest\032." + + ".google.spanner.v1.BatchCreateSessionsRe" + + "sponse\"j\202\323\344\223\002K\"F/v1/{database=projects/*" + + "/instances/*/databases/*}/sessions:batch" + + "Create:\001*\332A\026database,session_count\022\227\001\n\nG" + + "etSession\022$.google.spanner.v1.GetSession" + + "Request\032\032.google.spanner.v1.Session\"G\202\323\344" + + "\223\002:\0228/v1/{name=projects/*/instances/*/da" + + "tabases/*/sessions/*}\332A\004name\022\256\001\n\014ListSes" + + "sions\022&.google.spanner.v1.ListSessionsRe" + + "quest\032\'.google.spanner.v1.ListSessionsRe" + + "sponse\"M\202\323\344\223\002<\022:/v1/{database=projects/*" + + "/instances/*/databases/*}/sessions\332A\010dat" + + "abase\022\231\001\n\rDeleteSession\022\'.google.spanner" + + ".v1.DeleteSessionRequest\032\026.google.protob" + + "uf.Empty\"G\202\323\344\223\002:*8/v1/{name=projects/*/i" + + "nstances/*/databases/*/sessions/*}\332A\004nam" + + "e\022\243\001\n\nExecuteSql\022$.google.spanner.v1.Exe" + + "cuteSqlRequest\032\034.google.spanner.v1.Resul" + + "tSet\"Q\202\323\344\223\002K\"F/v1/{session=projects/*/in" + + "stances/*/databases/*/sessions/*}:execut" + + "eSql:\001*\022\276\001\n\023ExecuteStreamingSql\022$.google" + + ".spanner.v1.ExecuteSqlRequest\032#.google.s" + + "panner.v1.PartialResultSet\"Z\202\323\344\223\002T\"O/v1/" + + "{session=projects/*/instances/*/database" + + "s/*/sessions/*}:executeStreamingSql:\001*0\001" + + "\022\300\001\n\017ExecuteBatchDml\022).google.spanner.v1" + + ".ExecuteBatchDmlRequest\032*.google.spanner" + + ".v1.ExecuteBatchDmlResponse\"V\202\323\344\223\002P\"K/v1" + + "/{session=projects/*/instances/*/databas" + + "es/*/sessions/*}:executeBatchDml:\001*\022\221\001\n\004" + + "Read\022\036.google.spanner.v1.ReadRequest\032\034.g" + + "oogle.spanner.v1.ResultSet\"K\202\323\344\223\002E\"@/v1/" + + "{session=projects/*/instances/*/database" + + "s/*/sessions/*}:read:\001*\022\254\001\n\rStreamingRea" + + "d\022\036.google.spanner.v1.ReadRequest\032#.goog" + + "le.spanner.v1.PartialResultSet\"T\202\323\344\223\002N\"I" + + "/v1/{session=projects/*/instances/*/data" + + "bases/*/sessions/*}:streamingRead:\001*0\001\022\311" + + "\001\n\020BeginTransaction\022*.google.spanner.v1." + + "BeginTransactionRequest\032\036.google.spanner" + + ".v1.Transaction\"i\202\323\344\223\002Q\"L/v1/{session=pr" + "ojects/*/instances/*/databases/*/session" - + "s/*}:read:\001*\022\254\001\n\rStreamingRead\022\036.google." - + "spanner.v1.ReadRequest\032#.google.spanner." - + "v1.PartialResultSet\"T\202\323\344\223\002N\"I/v1/{sessio" - + "n=projects/*/instances/*/databases/*/ses" - + "sions/*}:streamingRead:\001*0\001\022\311\001\n\020BeginTra" - + "nsaction\022*.google.spanner.v1.BeginTransa" - + "ctionRequest\032\036.google.spanner.v1.Transac" - + "tion\"i\202\323\344\223\002Q\"L/v1/{session=projects/*/in" - + "stances/*/databases/*/sessions/*}:beginT" - + "ransaction:\001*\332A\017session,options\022\353\001\n\006Comm" - + "it\022 .google.spanner.v1.CommitRequest\032!.g" - + "oogle.spanner.v1.CommitResponse\"\233\001\202\323\344\223\002G" - + "\"B/v1/{session=projects/*/instances/*/da" - + "tabases/*/sessions/*}:commit:\001*\332A sessio" - + "n,transaction_id,mutations\332A(session,sin" - + "gle_use_transaction,mutations\022\260\001\n\010Rollba" - + "ck\022\".google.spanner.v1.RollbackRequest\032\026" - + ".google.protobuf.Empty\"h\202\323\344\223\002I\"D/v1/{ses" + + "s/*}:beginTransaction:\001*\332A\017session,optio" + + "ns\022\353\001\n\006Commit\022 .google.spanner.v1.Commit" + + "Request\032!.google.spanner.v1.CommitRespon" + + "se\"\233\001\202\323\344\223\002G\"B/v1/{session=projects/*/ins" + + "tances/*/databases/*/sessions/*}:commit:" + + "\001*\332A session,transaction_id,mutations\332A(" + + "session,single_use_transaction,mutations" + + "\022\260\001\n\010Rollback\022\".google.spanner.v1.Rollba" + + "ckRequest\032\026.google.protobuf.Empty\"h\202\323\344\223\002" + + "I\"D/v1/{session=projects/*/instances/*/d" + + "atabases/*/sessions/*}:rollback:\001*\332A\026ses" + + "sion,transaction_id\022\267\001\n\016PartitionQuery\022(" + + ".google.spanner.v1.PartitionQueryRequest" + + "\032$.google.spanner.v1.PartitionResponse\"U" + + "\202\323\344\223\002O\"J/v1/{session=projects/*/instance" + + "s/*/databases/*/sessions/*}:partitionQue" + + "ry:\001*\022\264\001\n\rPartitionRead\022\'.google.spanner" + + ".v1.PartitionReadRequest\032$.google.spanne" + + "r.v1.PartitionResponse\"T\202\323\344\223\002N\"I/v1/{ses" + "sion=projects/*/instances/*/databases/*/" - + "sessions/*}:rollback:\001*\332A\026session,transa" - + "ction_id\022\267\001\n\016PartitionQuery\022(.google.spa" - + "nner.v1.PartitionQueryRequest\032$.google.s" - + "panner.v1.PartitionResponse\"U\202\323\344\223\002O\"J/v1" - + "/{session=projects/*/instances/*/databas" - + "es/*/sessions/*}:partitionQuery:\001*\022\264\001\n\rP" - + "artitionRead\022\'.google.spanner.v1.Partiti" - + "onReadRequest\032$.google.spanner.v1.Partit" - + "ionResponse\"T\202\323\344\223\002N\"I/v1/{session=projec" - + "ts/*/instances/*/databases/*/sessions/*}" - + ":partitionRead:\001*\032w\312A\026spanner.googleapis" - + ".com\322A[https://www.googleapis.com/auth/c" - + "loud-platform,https://www.googleapis.com" - + "/auth/spanner.dataB\224\002\n\025com.google.spanne" - + "r.v1B\014SpannerProtoP\001Z8google.golang.org/" - + "genproto/googleapis/spanner/v1;spanner\252\002" - + "\027Google.Cloud.Spanner.V1\312\002\027Google\\Cloud\\" - + "Spanner\\V1\352\002\032Google::Cloud::Spanner::V1\352" - + "A_\n\037spanner.googleapis.com/Database\0221.8 UTF-8 0.31.0 - 2.1.3 - 3.2.3 + 2.1.4 + 3.2.5
@@ -32,7 +32,7 @@ com.google.cloud google-cloud-spanner - 6.19.0 + 6.20.0 diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 4d10a1e721a..2208d6b98bc 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -22,8 +22,8 @@ 1.8 UTF-8 0.31.0 - 2.1.3 - 3.2.3 + 2.1.4 + 3.2.5 @@ -31,7 +31,7 @@ com.google.cloud google-cloud-spanner - 6.20.0 + 6.21.0 diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 2104201819c..bfe4d24f759 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -33,7 +33,7 @@ com.google.cloud libraries-bom - 24.3.0 + 24.4.0 pom import diff --git a/versions.txt b/versions.txt index 8bc74e1ed6d..58235b2400a 100644 --- a/versions.txt +++ b/versions.txt @@ -1,10 +1,10 @@ # Format: # module:released-version:current-version -proto-google-cloud-spanner-admin-instance-v1:6.20.0:6.20.0 -proto-google-cloud-spanner-v1:6.20.0:6.20.0 -proto-google-cloud-spanner-admin-database-v1:6.20.0:6.20.0 -grpc-google-cloud-spanner-v1:6.20.0:6.20.0 -grpc-google-cloud-spanner-admin-instance-v1:6.20.0:6.20.0 -grpc-google-cloud-spanner-admin-database-v1:6.20.0:6.20.0 -google-cloud-spanner:6.20.0:6.20.0 +proto-google-cloud-spanner-admin-instance-v1:6.21.0:6.21.0 +proto-google-cloud-spanner-v1:6.21.0:6.21.0 +proto-google-cloud-spanner-admin-database-v1:6.21.0:6.21.0 +grpc-google-cloud-spanner-v1:6.21.0:6.21.0 +grpc-google-cloud-spanner-admin-instance-v1:6.21.0:6.21.0 +grpc-google-cloud-spanner-admin-database-v1:6.21.0:6.21.0 +google-cloud-spanner:6.21.0:6.21.0