diff --git a/generation_config.yaml b/generation_config.yaml index a6a7866d7e2..27a5edc83af 100644 --- a/generation_config.yaml +++ b/generation_config.yaml @@ -1,5 +1,5 @@ gapic_generator_version: 2.53.0 -googleapis_commitish: 6bc8e91bf92cc985da5ed0c227b48f12315cb695 +googleapis_commitish: fbbbf5023815f9a662c85aa8af8f3b72467fcb6f libraries_bom_version: 26.55.0 libraries: - api_shortname: spanner diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java index b7fc8b8d6dd..a8d7f7962a6 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java @@ -635,6 +635,7 @@ public void executeStreamingSqlTest() throws Exception { .setResumeToken(ByteString.EMPTY) .setStats(ResultSetStats.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setLast(true) .build(); mockSpanner.addResponse(expectedResponse); ExecuteSqlRequest request = @@ -861,6 +862,7 @@ public void streamingReadTest() throws Exception { .setResumeToken(ByteString.EMPTY) .setStats(ResultSetStats.newBuilder().build()) .setPrecommitToken(MultiplexedSessionPrecommitToken.newBuilder().build()) + .setLast(true) .build(); mockSpanner.addResponse(expectedResponse); ReadRequest request = diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java index 2cdbeddbbc9..4d3387926e2 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java @@ -137,13 +137,14 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -154,28 +155,28 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -191,7 +192,6 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -201,6 +201,11 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -222,13 +227,14 @@ public java.util.List getValuesList() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -239,28 +245,28 @@ public java.util.List getValuesList() { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -276,7 +282,6 @@ public java.util.List getValuesList() { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -286,6 +291,11 @@ public java.util.List getValuesList() { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -307,13 +317,14 @@ public java.util.List getValuesOrB * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -324,28 +335,28 @@ public java.util.List getValuesOrB * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -361,7 +372,6 @@ public java.util.List getValuesOrB * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -371,6 +381,11 @@ public java.util.List getValuesOrB * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -392,13 +407,14 @@ public int getValuesCount() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -409,28 +425,28 @@ public int getValuesCount() { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -446,7 +462,6 @@ public int getValuesCount() { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -456,6 +471,11 @@ public int getValuesCount() { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -477,13 +497,14 @@ public com.google.protobuf.Value getValues(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -494,28 +515,28 @@ public com.google.protobuf.Value getValues(int index) { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -531,7 +552,6 @@ public com.google.protobuf.Value getValues(int index) { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -541,6 +561,11 @@ public com.google.protobuf.Value getValues(int index) { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -556,9 +581,10 @@ public com.google.protobuf.ValueOrBuilder getValuesOrBuilder(int index) { * * *
-   * If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must
-   * be combined with more values from subsequent `PartialResultSet`s
-   * to obtain a complete field value.
+   * If true, then the final value in
+   * [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be
+   * combined with more values from subsequent `PartialResultSet`s to obtain a
+   * complete field value.
    * 
* * bool chunked_value = 3; @@ -600,10 +626,9 @@ public com.google.protobuf.ByteString getResumeToken() { *
    * Query plan and execution statistics for the statement that produced this
    * streaming result set. These can be requested by setting
-   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-   * only once with the last response in the stream.
-   * This field will also be present in the last response for DML
-   * statements.
+   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+   * and are sent only once with the last response in the stream. This field is
+   * also present in the last response for DML statements.
    * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -620,10 +645,9 @@ public boolean hasStats() { *
    * Query plan and execution statistics for the statement that produced this
    * streaming result set. These can be requested by setting
-   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-   * only once with the last response in the stream.
-   * This field will also be present in the last response for DML
-   * statements.
+   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+   * and are sent only once with the last response in the stream. This field is
+   * also present in the last response for DML statements.
    * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -640,10 +664,9 @@ public com.google.spanner.v1.ResultSetStats getStats() { *
    * Query plan and execution statistics for the statement that produced this
    * streaming result set. These can be requested by setting
-   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-   * only once with the last response in the stream.
-   * This field will also be present in the last response for DML
-   * statements.
+   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+   * and are sent only once with the last response in the stream. This field is
+   * also present in the last response for DML statements.
    * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -659,13 +682,10 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction
+   * has multiplexed sessions enabled. Pass the precommit token with the highest
+   * sequence number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -682,13 +702,10 @@ public boolean hasPrecommitToken() { * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction
+   * has multiplexed sessions enabled. Pass the precommit token with the highest
+   * sequence number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -707,13 +724,10 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction
+   * has multiplexed sessions enabled. Pass the precommit token with the highest
+   * sequence number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -728,6 +742,26 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( : precommitToken_; } + public static final int LAST_FIELD_NUMBER = 9; + private boolean last_ = false; + /** + * + * + *
+   * Optional. Indicates whether this is the last `PartialResultSet` in the
+   * stream. The server might optionally set this field. Clients shouldn't rely
+   * on this field being set in all cases.
+   * 
+ * + * bool last = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The last. + */ + @java.lang.Override + public boolean getLast() { + return last_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -760,6 +794,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000004) != 0)) { output.writeMessage(8, getPrecommitToken()); } + if (last_ != false) { + output.writeBool(9, last_); + } getUnknownFields().writeTo(output); } @@ -787,6 +824,9 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, getPrecommitToken()); } + if (last_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(9, last_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -817,6 +857,7 @@ public boolean equals(final java.lang.Object obj) { if (hasPrecommitToken()) { if (!getPrecommitToken().equals(other.getPrecommitToken())) return false; } + if (getLast() != other.getLast()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -848,6 +889,8 @@ public int hashCode() { hash = (37 * hash) + PRECOMMIT_TOKEN_FIELD_NUMBER; hash = (53 * hash) + getPrecommitToken().hashCode(); } + hash = (37 * hash) + LAST_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getLast()); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -1025,6 +1068,7 @@ public Builder clear() { precommitTokenBuilder_.dispose(); precommitTokenBuilder_ = null; } + last_ = false; return this; } @@ -1094,6 +1138,9 @@ private void buildPartial0(com.google.spanner.v1.PartialResultSet result) { precommitTokenBuilder_ == null ? precommitToken_ : precommitTokenBuilder_.build(); to_bitField0_ |= 0x00000004; } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.last_ = last_; + } result.bitField0_ |= to_bitField0_; } @@ -1184,6 +1231,9 @@ public Builder mergeFrom(com.google.spanner.v1.PartialResultSet other) { if (other.hasPrecommitToken()) { mergePrecommitToken(other.getPrecommitToken()); } + if (other.getLast() != false) { + setLast(other.getLast()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1252,6 +1302,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000020; break; } // case 66 + case 72: + { + last_ = input.readBool(); + bitField0_ |= 0x00000040; + break; + } // case 72 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1493,13 +1549,14 @@ private void ensureValuesIsMutable() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -1510,28 +1567,28 @@ private void ensureValuesIsMutable() { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -1547,7 +1604,6 @@ private void ensureValuesIsMutable() { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -1557,6 +1613,11 @@ private void ensureValuesIsMutable() { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -1581,13 +1642,14 @@ public java.util.List getValuesList() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -1598,28 +1660,28 @@ public java.util.List getValuesList() { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -1635,7 +1697,6 @@ public java.util.List getValuesList() { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -1645,6 +1706,11 @@ public java.util.List getValuesList() { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -1669,13 +1735,14 @@ public int getValuesCount() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -1686,28 +1753,28 @@ public int getValuesCount() { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -1723,7 +1790,6 @@ public int getValuesCount() { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -1733,6 +1799,11 @@ public int getValuesCount() { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -1757,13 +1828,14 @@ public com.google.protobuf.Value getValues(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -1774,28 +1846,28 @@ public com.google.protobuf.Value getValues(int index) { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -1811,7 +1883,6 @@ public com.google.protobuf.Value getValues(int index) { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -1821,6 +1892,11 @@ public com.google.protobuf.Value getValues(int index) { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -1851,13 +1927,14 @@ public Builder setValues(int index, com.google.protobuf.Value value) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -1868,28 +1945,28 @@ public Builder setValues(int index, com.google.protobuf.Value value) { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -1905,7 +1982,6 @@ public Builder setValues(int index, com.google.protobuf.Value value) { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -1915,6 +1991,11 @@ public Builder setValues(int index, com.google.protobuf.Value value) { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -1942,13 +2023,14 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -1959,28 +2041,28 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -1996,7 +2078,6 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2006,6 +2087,11 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2036,13 +2122,14 @@ public Builder addValues(com.google.protobuf.Value value) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -2053,28 +2140,28 @@ public Builder addValues(com.google.protobuf.Value value) { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -2090,7 +2177,6 @@ public Builder addValues(com.google.protobuf.Value value) { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2100,6 +2186,11 @@ public Builder addValues(com.google.protobuf.Value value) { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2130,13 +2221,14 @@ public Builder addValues(int index, com.google.protobuf.Value value) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -2147,28 +2239,28 @@ public Builder addValues(int index, com.google.protobuf.Value value) { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -2184,7 +2276,6 @@ public Builder addValues(int index, com.google.protobuf.Value value) { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2194,6 +2285,11 @@ public Builder addValues(int index, com.google.protobuf.Value value) { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2221,13 +2317,14 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -2238,28 +2335,28 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -2275,7 +2372,6 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2285,6 +2381,11 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2312,13 +2413,14 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -2329,28 +2431,28 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -2366,7 +2468,6 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2376,6 +2477,11 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2403,13 +2509,14 @@ public Builder addAllValues(java.lang.Iterable * * repeated .google.protobuf.Value values = 2; @@ -2494,13 +2605,14 @@ public Builder clearValues() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -2511,28 +2623,28 @@ public Builder clearValues() { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -2548,7 +2660,6 @@ public Builder clearValues() { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2558,6 +2669,11 @@ public Builder clearValues() { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2585,13 +2701,14 @@ public Builder removeValues(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -2602,28 +2719,28 @@ public Builder removeValues(int index) { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -2639,7 +2756,6 @@ public Builder removeValues(int index) { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2649,6 +2765,11 @@ public Builder removeValues(int index) { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2669,13 +2790,14 @@ public com.google.protobuf.Value.Builder getValuesBuilder(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -2686,28 +2808,28 @@ public com.google.protobuf.Value.Builder getValuesBuilder(int index) { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -2723,7 +2845,6 @@ public com.google.protobuf.Value.Builder getValuesBuilder(int index) { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2733,6 +2854,11 @@ public com.google.protobuf.Value.Builder getValuesBuilder(int index) { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2757,13 +2883,14 @@ public com.google.protobuf.ValueOrBuilder getValuesOrBuilder(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -2774,28 +2901,28 @@ public com.google.protobuf.ValueOrBuilder getValuesOrBuilder(int index) { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -2811,7 +2938,6 @@ public com.google.protobuf.ValueOrBuilder getValuesOrBuilder(int index) { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2821,6 +2947,11 @@ public com.google.protobuf.ValueOrBuilder getValuesOrBuilder(int index) { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2845,13 +2976,14 @@ public java.util.List getValuesOrB * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -2862,28 +2994,28 @@ public java.util.List getValuesOrB * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -2899,7 +3031,6 @@ public java.util.List getValuesOrB * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2909,6 +3040,11 @@ public java.util.List getValuesOrB * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -2929,13 +3065,14 @@ public com.google.protobuf.Value.Builder addValuesBuilder() { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -2946,28 +3083,28 @@ public com.google.protobuf.Value.Builder addValuesBuilder() { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -2983,7 +3120,6 @@ public com.google.protobuf.Value.Builder addValuesBuilder() { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -2993,6 +3129,11 @@ public com.google.protobuf.Value.Builder addValuesBuilder() { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -3014,13 +3155,14 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) { * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -3031,28 +3173,28 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) { * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -3068,7 +3210,6 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) { * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -3078,6 +3219,11 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) { * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -3108,9 +3254,10 @@ public java.util.List getValuesBuilderList() * * *
-     * If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must
-     * be combined with more values from subsequent `PartialResultSet`s
-     * to obtain a complete field value.
+     * If true, then the final value in
+     * [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be
+     * combined with more values from subsequent `PartialResultSet`s to obtain a
+     * complete field value.
      * 
* * bool chunked_value = 3; @@ -3125,9 +3272,10 @@ public boolean getChunkedValue() { * * *
-     * If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must
-     * be combined with more values from subsequent `PartialResultSet`s
-     * to obtain a complete field value.
+     * If true, then the final value in
+     * [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be
+     * combined with more values from subsequent `PartialResultSet`s to obtain a
+     * complete field value.
      * 
* * bool chunked_value = 3; @@ -3146,9 +3294,10 @@ public Builder setChunkedValue(boolean value) { * * *
-     * If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must
-     * be combined with more values from subsequent `PartialResultSet`s
-     * to obtain a complete field value.
+     * If true, then the final value in
+     * [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be
+     * combined with more values from subsequent `PartialResultSet`s to obtain a
+     * complete field value.
      * 
* * bool chunked_value = 3; @@ -3241,10 +3390,9 @@ public Builder clearResumeToken() { *
      * Query plan and execution statistics for the statement that produced this
      * streaming result set. These can be requested by setting
-     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-     * only once with the last response in the stream.
-     * This field will also be present in the last response for DML
-     * statements.
+     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+     * and are sent only once with the last response in the stream. This field is
+     * also present in the last response for DML statements.
      * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -3260,10 +3408,9 @@ public boolean hasStats() { *
      * Query plan and execution statistics for the statement that produced this
      * streaming result set. These can be requested by setting
-     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-     * only once with the last response in the stream.
-     * This field will also be present in the last response for DML
-     * statements.
+     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+     * and are sent only once with the last response in the stream. This field is
+     * also present in the last response for DML statements.
      * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -3283,10 +3430,9 @@ public com.google.spanner.v1.ResultSetStats getStats() { *
      * Query plan and execution statistics for the statement that produced this
      * streaming result set. These can be requested by setting
-     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-     * only once with the last response in the stream.
-     * This field will also be present in the last response for DML
-     * statements.
+     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+     * and are sent only once with the last response in the stream. This field is
+     * also present in the last response for DML statements.
      * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -3310,10 +3456,9 @@ public Builder setStats(com.google.spanner.v1.ResultSetStats value) { *
      * Query plan and execution statistics for the statement that produced this
      * streaming result set. These can be requested by setting
-     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-     * only once with the last response in the stream.
-     * This field will also be present in the last response for DML
-     * statements.
+     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+     * and are sent only once with the last response in the stream. This field is
+     * also present in the last response for DML statements.
      * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -3334,10 +3479,9 @@ public Builder setStats(com.google.spanner.v1.ResultSetStats.Builder builderForV *
      * Query plan and execution statistics for the statement that produced this
      * streaming result set. These can be requested by setting
-     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-     * only once with the last response in the stream.
-     * This field will also be present in the last response for DML
-     * statements.
+     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+     * and are sent only once with the last response in the stream. This field is
+     * also present in the last response for DML statements.
      * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -3366,10 +3510,9 @@ public Builder mergeStats(com.google.spanner.v1.ResultSetStats value) { *
      * Query plan and execution statistics for the statement that produced this
      * streaming result set. These can be requested by setting
-     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-     * only once with the last response in the stream.
-     * This field will also be present in the last response for DML
-     * statements.
+     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+     * and are sent only once with the last response in the stream. This field is
+     * also present in the last response for DML statements.
      * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -3390,10 +3533,9 @@ public Builder clearStats() { *
      * Query plan and execution statistics for the statement that produced this
      * streaming result set. These can be requested by setting
-     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-     * only once with the last response in the stream.
-     * This field will also be present in the last response for DML
-     * statements.
+     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+     * and are sent only once with the last response in the stream. This field is
+     * also present in the last response for DML statements.
      * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -3409,10 +3551,9 @@ public com.google.spanner.v1.ResultSetStats.Builder getStatsBuilder() { *
      * Query plan and execution statistics for the statement that produced this
      * streaming result set. These can be requested by setting
-     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-     * only once with the last response in the stream.
-     * This field will also be present in the last response for DML
-     * statements.
+     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+     * and are sent only once with the last response in the stream. This field is
+     * also present in the last response for DML statements.
      * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -3430,10 +3571,9 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { *
      * Query plan and execution statistics for the statement that produced this
      * streaming result set. These can be requested by setting
-     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-     * only once with the last response in the stream.
-     * This field will also be present in the last response for DML
-     * statements.
+     * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+     * and are sent only once with the last response in the stream. This field is
+     * also present in the last response for DML statements.
      * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -3465,13 +3605,10 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction
+     * has multiplexed sessions enabled. Pass the precommit token with the highest
+     * sequence number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -3487,13 +3624,10 @@ public boolean hasPrecommitToken() { * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction
+     * has multiplexed sessions enabled. Pass the precommit token with the highest
+     * sequence number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -3515,13 +3649,10 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction
+     * has multiplexed sessions enabled. Pass the precommit token with the highest
+     * sequence number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -3545,13 +3676,10 @@ public Builder setPrecommitToken(com.google.spanner.v1.MultiplexedSessionPrecomm * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction
+     * has multiplexed sessions enabled. Pass the precommit token with the highest
+     * sequence number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -3573,13 +3701,10 @@ public Builder setPrecommitToken( * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction
+     * has multiplexed sessions enabled. Pass the precommit token with the highest
+     * sequence number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -3610,13 +3735,10 @@ public Builder mergePrecommitToken( * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction
+     * has multiplexed sessions enabled. Pass the precommit token with the highest
+     * sequence number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -3637,13 +3759,10 @@ public Builder clearPrecommitToken() { * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction
+     * has multiplexed sessions enabled. Pass the precommit token with the highest
+     * sequence number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -3660,13 +3779,10 @@ public Builder clearPrecommitToken() { * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction
+     * has multiplexed sessions enabled. Pass the precommit token with the highest
+     * sequence number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -3687,13 +3803,10 @@ public Builder clearPrecommitToken() { * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction
+     * has multiplexed sessions enabled. Pass the precommit token with the highest
+     * sequence number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -3717,6 +3830,65 @@ public Builder clearPrecommitToken() { return precommitTokenBuilder_; } + private boolean last_; + /** + * + * + *
+     * Optional. Indicates whether this is the last `PartialResultSet` in the
+     * stream. The server might optionally set this field. Clients shouldn't rely
+     * on this field being set in all cases.
+     * 
+ * + * bool last = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The last. + */ + @java.lang.Override + public boolean getLast() { + return last_; + } + /** + * + * + *
+     * Optional. Indicates whether this is the last `PartialResultSet` in the
+     * stream. The server might optionally set this field. Clients shouldn't rely
+     * on this field being set in all cases.
+     * 
+ * + * bool last = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The last to set. + * @return This builder for chaining. + */ + public Builder setLast(boolean value) { + + last_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + /** + * + * + *
+     * Optional. Indicates whether this is the last `PartialResultSet` in the
+     * stream. The server might optionally set this field. Clients shouldn't rely
+     * on this field being set in all cases.
+     * 
+ * + * bool last = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearLast() { + bitField0_ = (bitField0_ & ~0x00000040); + last_ = false; + onChanged(); + return this; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java index 64748f45514..777addbd5ba 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java @@ -75,13 +75,14 @@ public interface PartialResultSetOrBuilder * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -92,28 +93,28 @@ public interface PartialResultSetOrBuilder * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -129,7 +130,6 @@ public interface PartialResultSetOrBuilder * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -139,6 +139,11 @@ public interface PartialResultSetOrBuilder * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -157,13 +162,14 @@ public interface PartialResultSetOrBuilder * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -174,28 +180,28 @@ public interface PartialResultSetOrBuilder * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -211,7 +217,6 @@ public interface PartialResultSetOrBuilder * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -221,6 +226,11 @@ public interface PartialResultSetOrBuilder * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -239,13 +249,14 @@ public interface PartialResultSetOrBuilder * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -256,28 +267,28 @@ public interface PartialResultSetOrBuilder * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -293,7 +304,6 @@ public interface PartialResultSetOrBuilder * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -303,6 +313,11 @@ public interface PartialResultSetOrBuilder * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -321,13 +336,14 @@ public interface PartialResultSetOrBuilder * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -338,28 +354,28 @@ public interface PartialResultSetOrBuilder * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -375,7 +391,6 @@ public interface PartialResultSetOrBuilder * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -385,6 +400,11 @@ public interface PartialResultSetOrBuilder * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -403,13 +423,14 @@ public interface PartialResultSetOrBuilder * Most values are encoded based on type as described * [here][google.spanner.v1.TypeCode]. * - * It is possible that the last value in values is "chunked", + * It's possible that the last value in values is "chunked", * meaning that the rest of the value is sent in subsequent - * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - * field. Two or more chunked values can be merged to form a - * complete value as follows: + * `PartialResultSet`(s). This is denoted by the + * [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + * Two or more chunked values can be merged to form a complete value as + * follows: * - * * `bool/number/null`: cannot be chunked + * * `bool/number/null`: can't be chunked * * `string`: concatenate the strings * * `list`: concatenate the lists. If the last element in a list is a * `string`, `list`, or `object`, merge it with the first element in @@ -420,28 +441,28 @@ public interface PartialResultSetOrBuilder * * Some examples of merging: * - * # Strings are concatenated. + * Strings are concatenated. * "foo", "bar" => "foobar" * - * # Lists of non-strings are concatenated. + * Lists of non-strings are concatenated. * [2, 3], [4] => [2, 3, 4] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are strings. * ["a", "b"], ["c", "d"] => ["a", "bc", "d"] * - * # Lists are concatenated, but the last and first elements are merged - * # because they are lists. Recursively, the last and first elements - * # of the inner lists are merged because they are strings. + * Lists are concatenated, but the last and first elements are merged + * because they are lists. Recursively, the last and first elements + * of the inner lists are merged because they are strings. * ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] * - * # Non-overlapping object fields are combined. + * Non-overlapping object fields are combined. * {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} * - * # Overlapping object fields are merged. + * Overlapping object fields are merged. * {"a": "1"}, {"a": "2"} => {"a": "12"} * - * # Examples of merging objects containing lists of strings. + * Examples of merging objects containing lists of strings. * {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} * * For a more complete example, suppose a streaming SQL query is @@ -457,7 +478,6 @@ public interface PartialResultSetOrBuilder * { * "values": ["orl"] * "chunked_value": true - * "resume_token": "Bqp2..." * } * { * "values": ["d"] @@ -467,6 +487,11 @@ public interface PartialResultSetOrBuilder * This sequence of `PartialResultSet`s encodes two rows, one * containing the field value `"Hello"`, and a second containing the * field value `"World" = "W" + "orl" + "d"`. + * + * Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + * resumed from a previously yielded `resume_token`. For the above sequence of + * `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + * yields results from the `PartialResultSet` with value "orl". * * * repeated .google.protobuf.Value values = 2; @@ -477,9 +502,10 @@ public interface PartialResultSetOrBuilder * * *
-   * If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must
-   * be combined with more values from subsequent `PartialResultSet`s
-   * to obtain a complete field value.
+   * If true, then the final value in
+   * [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be
+   * combined with more values from subsequent `PartialResultSet`s to obtain a
+   * complete field value.
    * 
* * bool chunked_value = 3; @@ -511,10 +537,9 @@ public interface PartialResultSetOrBuilder *
    * Query plan and execution statistics for the statement that produced this
    * streaming result set. These can be requested by setting
-   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-   * only once with the last response in the stream.
-   * This field will also be present in the last response for DML
-   * statements.
+   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+   * and are sent only once with the last response in the stream. This field is
+   * also present in the last response for DML statements.
    * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -528,10 +553,9 @@ public interface PartialResultSetOrBuilder *
    * Query plan and execution statistics for the statement that produced this
    * streaming result set. These can be requested by setting
-   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-   * only once with the last response in the stream.
-   * This field will also be present in the last response for DML
-   * statements.
+   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+   * and are sent only once with the last response in the stream. This field is
+   * also present in the last response for DML statements.
    * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -545,10 +569,9 @@ public interface PartialResultSetOrBuilder *
    * Query plan and execution statistics for the statement that produced this
    * streaming result set. These can be requested by setting
-   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent
-   * only once with the last response in the stream.
-   * This field will also be present in the last response for DML
-   * statements.
+   * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]
+   * and are sent only once with the last response in the stream. This field is
+   * also present in the last response for DML statements.
    * 
* * .google.spanner.v1.ResultSetStats stats = 5; @@ -559,13 +582,10 @@ public interface PartialResultSetOrBuilder * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction
+   * has multiplexed sessions enabled. Pass the precommit token with the highest
+   * sequence number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -579,13 +599,10 @@ public interface PartialResultSetOrBuilder * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction
+   * has multiplexed sessions enabled. Pass the precommit token with the highest
+   * sequence number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -599,13 +616,10 @@ public interface PartialResultSetOrBuilder * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction
+   * has multiplexed sessions enabled. Pass the precommit token with the highest
+   * sequence number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -613,4 +627,19 @@ public interface PartialResultSetOrBuilder * */ com.google.spanner.v1.MultiplexedSessionPrecommitTokenOrBuilder getPrecommitTokenOrBuilder(); + + /** + * + * + *
+   * Optional. Indicates whether this is the last `PartialResultSet` in the
+   * stream. The server might optionally set this field. Clients shouldn't rely
+   * on this field being set in all cases.
+   * 
+ * + * bool last = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The last. + */ + boolean getLast(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java index c5ea861bed8..82b8db2a04c 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java @@ -123,11 +123,10 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { * *
    * Each element in `rows` is a row whose format is defined by
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-   * in each row matches the ith field in
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-   * encoded based on type as described
-   * [here][google.spanner.v1.TypeCode].
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+   * element in each row matches the ith field in
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
    * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -141,11 +140,10 @@ public java.util.List getRowsList() { * *
    * Each element in `rows` is a row whose format is defined by
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-   * in each row matches the ith field in
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-   * encoded based on type as described
-   * [here][google.spanner.v1.TypeCode].
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+   * element in each row matches the ith field in
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
    * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -159,11 +157,10 @@ public java.util.List getRowsO * *
    * Each element in `rows` is a row whose format is defined by
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-   * in each row matches the ith field in
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-   * encoded based on type as described
-   * [here][google.spanner.v1.TypeCode].
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+   * element in each row matches the ith field in
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
    * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -177,11 +174,10 @@ public int getRowsCount() { * *
    * Each element in `rows` is a row whose format is defined by
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-   * in each row matches the ith field in
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-   * encoded based on type as described
-   * [here][google.spanner.v1.TypeCode].
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+   * element in each row matches the ith field in
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
    * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -195,11 +191,10 @@ public com.google.protobuf.ListValue getRows(int index) { * *
    * Each element in `rows` is a row whose format is defined by
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-   * in each row matches the ith field in
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-   * encoded based on type as described
-   * [here][google.spanner.v1.TypeCode].
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+   * element in each row matches the ith field in
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
    * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -220,8 +215,9 @@ public com.google.protobuf.ListValueOrBuilder getRowsOrBuilder(int index) { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -242,8 +238,9 @@ public boolean hasStats() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -264,8 +261,9 @@ public com.google.spanner.v1.ResultSetStats getStats() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -282,13 +280,10 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction is on
+   * a multiplexed session. Pass the precommit token with the highest sequence
+   * number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -305,13 +300,10 @@ public boolean hasPrecommitToken() { * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction is on
+   * a multiplexed session. Pass the precommit token with the highest sequence
+   * number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -330,13 +322,10 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction is on
+   * a multiplexed session. Pass the precommit token with the highest sequence
+   * number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -1051,11 +1040,10 @@ private void ensureRowsIsMutable() { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1072,11 +1060,10 @@ public java.util.List getRowsList() { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1093,11 +1080,10 @@ public int getRowsCount() { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1114,11 +1100,10 @@ public com.google.protobuf.ListValue getRows(int index) { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1141,11 +1126,10 @@ public Builder setRows(int index, com.google.protobuf.ListValue value) { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1165,11 +1149,10 @@ public Builder setRows(int index, com.google.protobuf.ListValue.Builder builderF * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1192,11 +1175,10 @@ public Builder addRows(com.google.protobuf.ListValue value) { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1219,11 +1201,10 @@ public Builder addRows(int index, com.google.protobuf.ListValue value) { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1243,11 +1224,10 @@ public Builder addRows(com.google.protobuf.ListValue.Builder builderForValue) { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1267,11 +1247,10 @@ public Builder addRows(int index, com.google.protobuf.ListValue.Builder builderF * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1291,11 +1270,10 @@ public Builder addAllRows(java.lang.Iterable * Each element in `rows` is a row whose format is defined by - * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element - * in each row matches the ith field in - * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are - * encoded based on type as described - * [here][google.spanner.v1.TypeCode]. + * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith + * element in each row matches the ith field in + * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements + * are encoded based on type as described [here][google.spanner.v1.TypeCode]. * * * repeated .google.protobuf.ListValue rows = 2; @@ -1315,11 +1293,10 @@ public Builder clearRows() { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1339,11 +1316,10 @@ public Builder removeRows(int index) { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1356,11 +1332,10 @@ public com.google.protobuf.ListValue.Builder getRowsBuilder(int index) { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1377,11 +1352,10 @@ public com.google.protobuf.ListValueOrBuilder getRowsOrBuilder(int index) { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1398,11 +1372,10 @@ public java.util.List getRowsO * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1415,11 +1388,10 @@ public com.google.protobuf.ListValue.Builder addRowsBuilder() { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1433,11 +1405,10 @@ public com.google.protobuf.ListValue.Builder addRowsBuilder(int index) { * *
      * Each element in `rows` is a row whose format is defined by
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-     * in each row matches the ith field in
-     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-     * encoded based on type as described
-     * [here][google.spanner.v1.TypeCode].
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+     * element in each row matches the ith field in
+     * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+     * are encoded based on type as described [here][google.spanner.v1.TypeCode].
      * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -1478,8 +1449,9 @@ public java.util.List getRowsBuilderList( * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1499,8 +1471,9 @@ public boolean hasStats() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1524,8 +1497,9 @@ public com.google.spanner.v1.ResultSetStats getStats() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1553,8 +1527,9 @@ public Builder setStats(com.google.spanner.v1.ResultSetStats value) { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1579,8 +1554,9 @@ public Builder setStats(com.google.spanner.v1.ResultSetStats.Builder builderForV * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1613,8 +1589,9 @@ public Builder mergeStats(com.google.spanner.v1.ResultSetStats value) { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1639,8 +1616,9 @@ public Builder clearStats() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1660,8 +1638,9 @@ public com.google.spanner.v1.ResultSetStats.Builder getStatsBuilder() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1683,8 +1662,9 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * * @@ -1717,13 +1697,10 @@ public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction is on
+     * a multiplexed session. Pass the precommit token with the highest sequence
+     * number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -1739,13 +1716,10 @@ public boolean hasPrecommitToken() { * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction is on
+     * a multiplexed session. Pass the precommit token with the highest sequence
+     * number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -1767,13 +1741,10 @@ public com.google.spanner.v1.MultiplexedSessionPrecommitToken getPrecommitToken( * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction is on
+     * a multiplexed session. Pass the precommit token with the highest sequence
+     * number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -1797,13 +1768,10 @@ public Builder setPrecommitToken(com.google.spanner.v1.MultiplexedSessionPrecomm * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction is on
+     * a multiplexed session. Pass the precommit token with the highest sequence
+     * number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -1825,13 +1793,10 @@ public Builder setPrecommitToken( * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction is on
+     * a multiplexed session. Pass the precommit token with the highest sequence
+     * number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -1862,13 +1827,10 @@ public Builder mergePrecommitToken( * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction is on
+     * a multiplexed session. Pass the precommit token with the highest sequence
+     * number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -1889,13 +1851,10 @@ public Builder clearPrecommitToken() { * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction is on
+     * a multiplexed session. Pass the precommit token with the highest sequence
+     * number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -1912,13 +1871,10 @@ public Builder clearPrecommitToken() { * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction is on
+     * a multiplexed session. Pass the precommit token with the highest sequence
+     * number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * @@ -1939,13 +1895,10 @@ public Builder clearPrecommitToken() { * * *
-     * Optional. A precommit token will be included if the read-write transaction
-     * is on a multiplexed session.
-     * The precommit token with the highest sequence number from this transaction
-     * attempt should be passed to the
+     * Optional. A precommit token is included if the read-write transaction is on
+     * a multiplexed session. Pass the precommit token with the highest sequence
+     * number from this transaction attempt to the
      * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-     * This feature is not yet supported and will result in an UNIMPLEMENTED
-     * error.
      * 
* * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java index 39be68d3aaf..bc6e8652737 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java @@ -23,7 +23,8 @@ * * *
- * Metadata about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet].
+ * Metadata about a [ResultSet][google.spanner.v1.ResultSet] or
+ * [PartialResultSet][google.spanner.v1.PartialResultSet].
  * 
* * Protobuf type {@code google.spanner.v1.ResultSetMetadata} @@ -69,7 +70,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { * *
    * Indicates the field names and types for the rows in the result
-   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
    *
    *     "fields": [
@@ -91,7 +92,7 @@ public boolean hasRowType() {
    *
    * 
    * Indicates the field names and types for the rows in the result
-   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
    *
    *     "fields": [
@@ -113,7 +114,7 @@ public com.google.spanner.v1.StructType getRowType() {
    *
    * 
    * Indicates the field names and types for the rows in the result
-   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
    *
    *     "fields": [
@@ -455,7 +456,8 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    *
    *
    * 
-   * Metadata about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet].
+   * Metadata about a [ResultSet][google.spanner.v1.ResultSet] or
+   * [PartialResultSet][google.spanner.v1.PartialResultSet].
    * 
* * Protobuf type {@code google.spanner.v1.ResultSetMetadata} @@ -701,7 +703,7 @@ public Builder mergeFrom( * *
      * Indicates the field names and types for the rows in the result
-     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
      *
      *     "fields": [
@@ -722,7 +724,7 @@ public boolean hasRowType() {
      *
      * 
      * Indicates the field names and types for the rows in the result
-     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
      *
      *     "fields": [
@@ -747,7 +749,7 @@ public com.google.spanner.v1.StructType getRowType() {
      *
      * 
      * Indicates the field names and types for the rows in the result
-     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
      *
      *     "fields": [
@@ -776,7 +778,7 @@ public Builder setRowType(com.google.spanner.v1.StructType value) {
      *
      * 
      * Indicates the field names and types for the rows in the result
-     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
      *
      *     "fields": [
@@ -802,7 +804,7 @@ public Builder setRowType(com.google.spanner.v1.StructType.Builder builderForVal
      *
      * 
      * Indicates the field names and types for the rows in the result
-     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
      *
      *     "fields": [
@@ -836,7 +838,7 @@ public Builder mergeRowType(com.google.spanner.v1.StructType value) {
      *
      * 
      * Indicates the field names and types for the rows in the result
-     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
      *
      *     "fields": [
@@ -862,7 +864,7 @@ public Builder clearRowType() {
      *
      * 
      * Indicates the field names and types for the rows in the result
-     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
      *
      *     "fields": [
@@ -883,7 +885,7 @@ public com.google.spanner.v1.StructType.Builder getRowTypeBuilder() {
      *
      * 
      * Indicates the field names and types for the rows in the result
-     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
      *
      *     "fields": [
@@ -906,7 +908,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() {
      *
      * 
      * Indicates the field names and types for the rows in the result
-     * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+     * set. For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
      *
      *     "fields": [
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java
index 3598bd0405f..38ab303ed36 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java
@@ -29,7 +29,7 @@ public interface ResultSetMetadataOrBuilder
    *
    * 
    * Indicates the field names and types for the rows in the result
-   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
    *
    *     "fields": [
@@ -48,7 +48,7 @@ public interface ResultSetMetadataOrBuilder
    *
    * 
    * Indicates the field names and types for the rows in the result
-   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
    *
    *     "fields": [
@@ -67,7 +67,7 @@ public interface ResultSetMetadataOrBuilder
    *
    * 
    * Indicates the field names and types for the rows in the result
-   * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
+   * set. For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
    *
    *     "fields": [
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java
index 5debcb0ddd8..85e38392255 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java
@@ -64,11 +64,10 @@ public interface ResultSetOrBuilder
    *
    * 
    * Each element in `rows` is a row whose format is defined by
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-   * in each row matches the ith field in
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-   * encoded based on type as described
-   * [here][google.spanner.v1.TypeCode].
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+   * element in each row matches the ith field in
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
    * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -79,11 +78,10 @@ public interface ResultSetOrBuilder * *
    * Each element in `rows` is a row whose format is defined by
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-   * in each row matches the ith field in
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-   * encoded based on type as described
-   * [here][google.spanner.v1.TypeCode].
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+   * element in each row matches the ith field in
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
    * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -94,11 +92,10 @@ public interface ResultSetOrBuilder * *
    * Each element in `rows` is a row whose format is defined by
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-   * in each row matches the ith field in
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-   * encoded based on type as described
-   * [here][google.spanner.v1.TypeCode].
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+   * element in each row matches the ith field in
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
    * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -109,11 +106,10 @@ public interface ResultSetOrBuilder * *
    * Each element in `rows` is a row whose format is defined by
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-   * in each row matches the ith field in
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-   * encoded based on type as described
-   * [here][google.spanner.v1.TypeCode].
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+   * element in each row matches the ith field in
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
    * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -124,11 +120,10 @@ public interface ResultSetOrBuilder * *
    * Each element in `rows` is a row whose format is defined by
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element
-   * in each row matches the ith field in
-   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are
-   * encoded based on type as described
-   * [here][google.spanner.v1.TypeCode].
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith
+   * element in each row matches the ith field in
+   * [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements
+   * are encoded based on type as described [here][google.spanner.v1.TypeCode].
    * 
* * repeated .google.protobuf.ListValue rows = 2; @@ -144,8 +139,9 @@ public interface ResultSetOrBuilder * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. *
* @@ -163,8 +159,9 @@ public interface ResultSetOrBuilder * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. *
* @@ -182,8 +179,9 @@ public interface ResultSetOrBuilder * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. * DML statements always produce stats containing the number of rows * modified, unless executed using the - * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - * Other fields may or may not be populated, based on the + * [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + * Other fields might or might not be populated, based on the * [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. *
* @@ -195,13 +193,10 @@ public interface ResultSetOrBuilder * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction is on
+   * a multiplexed session. Pass the precommit token with the highest sequence
+   * number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -215,13 +210,10 @@ public interface ResultSetOrBuilder * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction is on
+   * a multiplexed session. Pass the precommit token with the highest sequence
+   * number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * @@ -235,13 +227,10 @@ public interface ResultSetOrBuilder * * *
-   * Optional. A precommit token will be included if the read-write transaction
-   * is on a multiplexed session.
-   * The precommit token with the highest sequence number from this transaction
-   * attempt should be passed to the
+   * Optional. A precommit token is included if the read-write transaction is on
+   * a multiplexed session. Pass the precommit token with the highest sequence
+   * number from this transaction attempt to the
    * [Commit][google.spanner.v1.Spanner.Commit] request for this transaction.
-   * This feature is not yet supported and will result in an UNIMPLEMENTED
-   * error.
    * 
* * diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java index 84beab76ecd..899e7b0a27a 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java @@ -64,7 +64,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "buf.ListValue\0220\n\005stats\030\003 \001(\0132!.google.sp" + "anner.v1.ResultSetStats\022Q\n\017precommit_tok" + "en\030\005 \001(\01323.google.spanner.v1.Multiplexed" - + "SessionPrecommitTokenB\003\340A\001\"\244\002\n\020PartialRe" + + "SessionPrecommitTokenB\003\340A\001\"\267\002\n\020PartialRe" + "sultSet\0226\n\010metadata\030\001 \001(\0132$.google.spann" + "er.v1.ResultSetMetadata\022&\n\006values\030\002 \003(\0132" + "\026.google.protobuf.Value\022\025\n\rchunked_value" @@ -72,21 +72,21 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\001(\0132!.google.spanner.v1.ResultSetStats\022Q" + "\n\017precommit_token\030\010 \001(\01323.google.spanner" + ".v1.MultiplexedSessionPrecommitTokenB\003\340A" - + "\001\"\267\001\n\021ResultSetMetadata\022/\n\010row_type\030\001 \001(" - + "\0132\035.google.spanner.v1.StructType\0223\n\013tran" - + "saction\030\002 \001(\0132\036.google.spanner.v1.Transa" - + "ction\022<\n\025undeclared_parameters\030\003 \001(\0132\035.g" - + "oogle.spanner.v1.StructType\"\271\001\n\016ResultSe" - + "tStats\0220\n\nquery_plan\030\001 \001(\0132\034.google.span" - + "ner.v1.QueryPlan\022,\n\013query_stats\030\002 \001(\0132\027." - + "google.protobuf.Struct\022\031\n\017row_count_exac" - + "t\030\003 \001(\003H\000\022\037\n\025row_count_lower_bound\030\004 \001(\003" - + "H\000B\013\n\trow_countB\264\001\n\025com.google.spanner.v" - + "1B\016ResultSetProtoP\001Z5cloud.google.com/go" - + "/spanner/apiv1/spannerpb;spannerpb\370\001\001\252\002\027" - + "Google.Cloud.Spanner.V1\312\002\027Google\\Cloud\\S" - + "panner\\V1\352\002\032Google::Cloud::Spanner::V1b\006" - + "proto3" + + "\001\022\021\n\004last\030\t \001(\010B\003\340A\001\"\267\001\n\021ResultSetMetada" + + "ta\022/\n\010row_type\030\001 \001(\0132\035.google.spanner.v1" + + ".StructType\0223\n\013transaction\030\002 \001(\0132\036.googl" + + "e.spanner.v1.Transaction\022<\n\025undeclared_p" + + "arameters\030\003 \001(\0132\035.google.spanner.v1.Stru" + + "ctType\"\271\001\n\016ResultSetStats\0220\n\nquery_plan\030" + + "\001 \001(\0132\034.google.spanner.v1.QueryPlan\022,\n\013q" + + "uery_stats\030\002 \001(\0132\027.google.protobuf.Struc" + + "t\022\031\n\017row_count_exact\030\003 \001(\003H\000\022\037\n\025row_coun" + + "t_lower_bound\030\004 \001(\003H\000B\013\n\trow_countB\261\001\n\025c" + + "om.google.spanner.v1B\016ResultSetProtoP\001Z5" + + "cloud.google.com/go/spanner/apiv1/spanne" + + "rpb;spannerpb\252\002\027Google.Cloud.Spanner.V1\312" + + "\002\027Google\\Cloud\\Spanner\\V1\352\002\032Google::Clou" + + "d::Spanner::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -112,7 +112,13 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_v1_PartialResultSet_descriptor, new java.lang.String[] { - "Metadata", "Values", "ChunkedValue", "ResumeToken", "Stats", "PrecommitToken", + "Metadata", + "Values", + "ChunkedValue", + "ResumeToken", + "Stats", + "PrecommitToken", + "Last", }); internal_static_google_spanner_v1_ResultSetMetadata_descriptor = getDescriptor().getMessageTypes().get(2); diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java index b13da2d2282..1ed3c04f33a 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java @@ -23,7 +23,8 @@ * * *
- * Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet].
+ * Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or
+ * [PartialResultSet][google.spanner.v1.PartialResultSet].
  * 
* * Protobuf type {@code google.spanner.v1.ResultSetStats} @@ -117,7 +118,8 @@ public RowCountCase getRowCountCase() { * * *
-   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+   * result.
    * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -132,7 +134,8 @@ public boolean hasQueryPlan() { * * *
-   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+   * result.
    * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -147,7 +150,8 @@ public com.google.spanner.v1.QueryPlan getQueryPlan() { * * *
-   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+   * result.
    * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -267,7 +271,7 @@ public long getRowCountExact() { * * *
-   * Partitioned DML does not offer exactly-once semantics, so it
+   * Partitioned DML doesn't offer exactly-once semantics, so it
    * returns a lower bound of the rows modified.
    * 
* @@ -283,7 +287,7 @@ public boolean hasRowCountLowerBound() { * * *
-   * Partitioned DML does not offer exactly-once semantics, so it
+   * Partitioned DML doesn't offer exactly-once semantics, so it
    * returns a lower bound of the rows modified.
    * 
* @@ -518,7 +522,8 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * * *
-   * Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet].
+   * Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or
+   * [PartialResultSet][google.spanner.v1.PartialResultSet].
    * 
* * Protobuf type {@code google.spanner.v1.ResultSetStats} @@ -788,7 +793,8 @@ public Builder clearRowCount() { * * *
-     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+     * result.
      * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -802,7 +808,8 @@ public boolean hasQueryPlan() { * * *
-     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+     * result.
      * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -822,7 +829,8 @@ public com.google.spanner.v1.QueryPlan getQueryPlan() { * * *
-     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+     * result.
      * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -844,7 +852,8 @@ public Builder setQueryPlan(com.google.spanner.v1.QueryPlan value) { * * *
-     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+     * result.
      * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -863,7 +872,8 @@ public Builder setQueryPlan(com.google.spanner.v1.QueryPlan.Builder builderForVa * * *
-     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+     * result.
      * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -890,7 +900,8 @@ public Builder mergeQueryPlan(com.google.spanner.v1.QueryPlan value) { * * *
-     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+     * result.
      * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -909,7 +920,8 @@ public Builder clearQueryPlan() { * * *
-     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+     * result.
      * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -923,7 +935,8 @@ public com.google.spanner.v1.QueryPlan.Builder getQueryPlanBuilder() { * * *
-     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+     * result.
      * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -941,7 +954,8 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() { * * *
-     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+     * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+     * result.
      * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -1290,7 +1304,7 @@ public Builder clearRowCountExact() { * * *
-     * Partitioned DML does not offer exactly-once semantics, so it
+     * Partitioned DML doesn't offer exactly-once semantics, so it
      * returns a lower bound of the rows modified.
      * 
* @@ -1305,7 +1319,7 @@ public boolean hasRowCountLowerBound() { * * *
-     * Partitioned DML does not offer exactly-once semantics, so it
+     * Partitioned DML doesn't offer exactly-once semantics, so it
      * returns a lower bound of the rows modified.
      * 
* @@ -1323,7 +1337,7 @@ public long getRowCountLowerBound() { * * *
-     * Partitioned DML does not offer exactly-once semantics, so it
+     * Partitioned DML doesn't offer exactly-once semantics, so it
      * returns a lower bound of the rows modified.
      * 
* @@ -1343,7 +1357,7 @@ public Builder setRowCountLowerBound(long value) { * * *
-     * Partitioned DML does not offer exactly-once semantics, so it
+     * Partitioned DML doesn't offer exactly-once semantics, so it
      * returns a lower bound of the rows modified.
      * 
* diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java index a3fd01bb7ab..343981c2d87 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java @@ -28,7 +28,8 @@ public interface ResultSetStatsOrBuilder * * *
-   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+   * result.
    * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -40,7 +41,8 @@ public interface ResultSetStatsOrBuilder * * *
-   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+   * result.
    * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -52,7 +54,8 @@ public interface ResultSetStatsOrBuilder * * *
-   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result.
+   * [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this
+   * result.
    * 
* * .google.spanner.v1.QueryPlan query_plan = 1; @@ -147,7 +150,7 @@ public interface ResultSetStatsOrBuilder * * *
-   * Partitioned DML does not offer exactly-once semantics, so it
+   * Partitioned DML doesn't offer exactly-once semantics, so it
    * returns a lower bound of the rows modified.
    * 
* @@ -160,7 +163,7 @@ public interface ResultSetStatsOrBuilder * * *
-   * Partitioned DML does not offer exactly-once semantics, so it
+   * Partitioned DML doesn't offer exactly-once semantics, so it
    * returns a lower bound of the rows modified.
    * 
* diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto index 0b8aabf8679..3735eeddc16 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto @@ -22,7 +22,6 @@ import "google/spanner/v1/query_plan.proto"; import "google/spanner/v1/transaction.proto"; import "google/spanner/v1/type.proto"; -option cc_enable_arenas = true; option csharp_namespace = "Google.Cloud.Spanner.V1"; option go_package = "cloud.google.com/go/spanner/apiv1/spannerpb;spannerpb"; option java_multiple_files = true; @@ -38,11 +37,10 @@ message ResultSet { ResultSetMetadata metadata = 1; // Each element in `rows` is a row whose format is defined by - // [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith element - // in each row matches the ith field in - // [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements are - // encoded based on type as described - // [here][google.spanner.v1.TypeCode]. + // [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. The ith + // element in each row matches the ith field in + // [metadata.row_type][google.spanner.v1.ResultSetMetadata.row_type]. Elements + // are encoded based on type as described [here][google.spanner.v1.TypeCode]. repeated google.protobuf.ListValue rows = 2; // Query plan and execution statistics for the SQL statement that @@ -50,18 +48,16 @@ message ResultSet { // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. // DML statements always produce stats containing the number of rows // modified, unless executed using the - // [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. - // Other fields may or may not be populated, based on the + // [ExecuteSqlRequest.QueryMode.PLAN][google.spanner.v1.ExecuteSqlRequest.QueryMode.PLAN] + // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. + // Other fields might or might not be populated, based on the // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]. ResultSetStats stats = 3; - // Optional. A precommit token will be included if the read-write transaction - // is on a multiplexed session. - // The precommit token with the highest sequence number from this transaction - // attempt should be passed to the + // Optional. A precommit token is included if the read-write transaction is on + // a multiplexed session. Pass the precommit token with the highest sequence + // number from this transaction attempt to the // [Commit][google.spanner.v1.Spanner.Commit] request for this transaction. - // This feature is not yet supported and will result in an UNIMPLEMENTED - // error. MultiplexedSessionPrecommitToken precommit_token = 5 [(google.api.field_behavior) = OPTIONAL]; } @@ -83,13 +79,14 @@ message PartialResultSet { // Most values are encoded based on type as described // [here][google.spanner.v1.TypeCode]. // - // It is possible that the last value in values is "chunked", + // It's possible that the last value in values is "chunked", // meaning that the rest of the value is sent in subsequent - // `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] - // field. Two or more chunked values can be merged to form a - // complete value as follows: + // `PartialResultSet`(s). This is denoted by the + // [chunked_value][google.spanner.v1.PartialResultSet.chunked_value] field. + // Two or more chunked values can be merged to form a complete value as + // follows: // - // * `bool/number/null`: cannot be chunked + // * `bool/number/null`: can't be chunked // * `string`: concatenate the strings // * `list`: concatenate the lists. If the last element in a list is a // `string`, `list`, or `object`, merge it with the first element in @@ -100,28 +97,28 @@ message PartialResultSet { // // Some examples of merging: // - // # Strings are concatenated. + // Strings are concatenated. // "foo", "bar" => "foobar" // - // # Lists of non-strings are concatenated. + // Lists of non-strings are concatenated. // [2, 3], [4] => [2, 3, 4] // - // # Lists are concatenated, but the last and first elements are merged - // # because they are strings. + // Lists are concatenated, but the last and first elements are merged + // because they are strings. // ["a", "b"], ["c", "d"] => ["a", "bc", "d"] // - // # Lists are concatenated, but the last and first elements are merged - // # because they are lists. Recursively, the last and first elements - // # of the inner lists are merged because they are strings. + // Lists are concatenated, but the last and first elements are merged + // because they are lists. Recursively, the last and first elements + // of the inner lists are merged because they are strings. // ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] // - // # Non-overlapping object fields are combined. + // Non-overlapping object fields are combined. // {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} // - // # Overlapping object fields are merged. + // Overlapping object fields are merged. // {"a": "1"}, {"a": "2"} => {"a": "12"} // - // # Examples of merging objects containing lists of strings. + // Examples of merging objects containing lists of strings. // {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} // // For a more complete example, suppose a streaming SQL query is @@ -137,7 +134,6 @@ message PartialResultSet { // { // "values": ["orl"] // "chunked_value": true - // "resume_token": "Bqp2..." // } // { // "values": ["d"] @@ -147,11 +143,17 @@ message PartialResultSet { // This sequence of `PartialResultSet`s encodes two rows, one // containing the field value `"Hello"`, and a second containing the // field value `"World" = "W" + "orl" + "d"`. + // + // Not all `PartialResultSet`s contain a `resume_token`. Execution can only be + // resumed from a previously yielded `resume_token`. For the above sequence of + // `PartialResultSet`s, resuming the query with `"resume_token": "Af65..."` + // yields results from the `PartialResultSet` with value "orl". repeated google.protobuf.Value values = 2; - // If true, then the final value in [values][google.spanner.v1.PartialResultSet.values] is chunked, and must - // be combined with more values from subsequent `PartialResultSet`s - // to obtain a complete field value. + // If true, then the final value in + // [values][google.spanner.v1.PartialResultSet.values] is chunked, and must be + // combined with more values from subsequent `PartialResultSet`s to obtain a + // complete field value. bool chunked_value = 3; // Streaming calls might be interrupted for a variety of reasons, such @@ -163,27 +165,29 @@ message PartialResultSet { // Query plan and execution statistics for the statement that produced this // streaming result set. These can be requested by setting - // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] and are sent - // only once with the last response in the stream. - // This field will also be present in the last response for DML - // statements. + // [ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] + // and are sent only once with the last response in the stream. This field is + // also present in the last response for DML statements. ResultSetStats stats = 5; - // Optional. A precommit token will be included if the read-write transaction - // is on a multiplexed session. - // The precommit token with the highest sequence number from this transaction - // attempt should be passed to the + // Optional. A precommit token is included if the read-write transaction + // has multiplexed sessions enabled. Pass the precommit token with the highest + // sequence number from this transaction attempt to the // [Commit][google.spanner.v1.Spanner.Commit] request for this transaction. - // This feature is not yet supported and will result in an UNIMPLEMENTED - // error. MultiplexedSessionPrecommitToken precommit_token = 8 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Indicates whether this is the last `PartialResultSet` in the + // stream. The server might optionally set this field. Clients shouldn't rely + // on this field being set in all cases. + bool last = 9 [(google.api.field_behavior) = OPTIONAL]; } -// Metadata about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet]. +// Metadata about a [ResultSet][google.spanner.v1.ResultSet] or +// [PartialResultSet][google.spanner.v1.PartialResultSet]. message ResultSetMetadata { // Indicates the field names and types for the rows in the result - // set. For example, a SQL query like `"SELECT UserId, UserName FROM + // set. For example, a SQL query like `"SELECT UserId, UserName FROM // Users"` could return a `row_type` value like: // // "fields": [ @@ -209,9 +213,11 @@ message ResultSetMetadata { StructType undeclared_parameters = 3; } -// Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet]. +// Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or +// [PartialResultSet][google.spanner.v1.PartialResultSet]. message ResultSetStats { - // [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this result. + // [QueryPlan][google.spanner.v1.QueryPlan] for the query associated with this + // result. QueryPlan query_plan = 1; // Aggregated statistics from the execution of the query. Only present when @@ -230,7 +236,7 @@ message ResultSetStats { // Standard DML returns an exact count of rows that were modified. int64 row_count_exact = 3; - // Partitioned DML does not offer exactly-once semantics, so it + // Partitioned DML doesn't offer exactly-once semantics, so it // returns a lower bound of the rows modified. int64 row_count_lower_bound = 4; }