public sealed class PartialResultSet : IMessage<PartialResultSet>, IEquatable<PartialResultSet>, IDeepCloneable<PartialResultSet>, IBufferMessage, IMessage
Reference documentation and code samples for the Google Cloud Spanner v1 API class PartialResultSet.
Partial results from a streaming read or SQL query. Streaming reads and SQL queries better tolerate large result sets, large rows, and large values, but are a little trickier to consume.
Implements
IMessagePartialResultSet, IEquatablePartialResultSet, IDeepCloneablePartialResultSet, IBufferMessage, IMessageNamespace
Google.Cloud.Spanner.V1Assembly
Google.Cloud.Spanner.V1.dll
Constructors
PartialResultSet()
public PartialResultSet()
PartialResultSet(PartialResultSet)
public PartialResultSet(PartialResultSet other)
Parameter | |
---|---|
Name | Description |
other |
PartialResultSet |
Properties
ChunkedValue
public bool ChunkedValue { get; set; }
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.
Property Value | |
---|---|
Type | Description |
bool |
Metadata
public ResultSetMetadata Metadata { get; set; }
Metadata about the result set, such as row type information. Only present in the first response.
Property Value | |
---|---|
Type | Description |
ResultSetMetadata |
PrecommitToken
public MultiplexedSessionPrecommitToken PrecommitToken { get; set; }
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 [Commit][google.spanner.v1.Spanner.Commit] request for this transaction. This feature is not yet supported and will result in an UNIMPLEMENTED error.
Property Value | |
---|---|
Type | Description |
MultiplexedSessionPrecommitToken |
ResumeToken
public ByteString ResumeToken { get; set; }
Streaming calls might be interrupted for a variety of reasons, such
as TCP connection loss. If this occurs, the stream of results can
be resumed by re-sending the original request and including
resume_token
. Note that executing any other transaction in the
same session invalidates the token.
Property Value | |
---|---|
Type | Description |
ByteString |
Stats
public ResultSetStats Stats { get; set; }
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.
Property Value | |
---|---|
Type | Description |
ResultSetStats |
Values
public RepeatedField<Value> Values { get; }
A streamed result set consists of a stream of values, which might
be split into many PartialResultSet
messages to accommodate
large rows and/or large values. Every N complete values defines a
row, where N is equal to the number of entries in
[metadata.row_type.fields][google.spanner.v1.StructType.fields].
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",
meaning that the rest of the value is sent in subsequent
PartialResultSet
(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
field. Two or more chunked values can be merged to form a
complete value as follows:
bool/number/null
: cannot be chunkedstring
: concatenate the stringslist
: concatenate the lists. If the last element in a list is astring
,list
, orobject
, merge it with the first element in the next list by applying these rules recursively.object
: concatenate the (field name, field value) pairs. If a field name is duplicated, then apply these rules recursively to merge the field values.
Some examples of merging:
# Strings are concatenated.
"foo", "bar" => "foobar"
# Lists of non-strings are concatenated.
[2, 3], [4] => [2, 3, 4]
# Lists are concatenated, but the last and first elements are merged
# because they are strings.
["a", "b"], ["c", "d"] => ["a", "bc", "d"]
# Lists are concatenated, but the last and first elements are merged
# because they are lists. Recursively, the last and first elements
# of the inner lists are merged because they are strings.
["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
# Non-overlapping object fields are combined.
{"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
# Overlapping object fields are merged.
{"a": "1"}, {"a": "2"} => {"a": "12"}
# Examples of merging objects containing lists of strings.
{"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
For a more complete example, suppose a streaming SQL query is
yielding a result set whose rows contain a single string
field. The following PartialResultSet
s might be yielded:
{
"metadata": { ... }
"values": ["Hello", "W"]
"chunked_value": true
"resume_token": "Af65..."
}
{
"values": ["orl"]
"chunked_value": true
"resume_token": "Bqp2..."
}
{
"values": ["d"]
"resume_token": "Zx1B..."
}
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"
.
Property Value | |
---|---|
Type | Description |
RepeatedFieldValue |