123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- // Copyright 2022 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- syntax = "proto3";
- package google.spanner.v1;
- import "google/protobuf/struct.proto";
- option csharp_namespace = "Google.Cloud.Spanner.V1";
- option go_package = "google.golang.org/genproto/googleapis/spanner/v1;spanner";
- option java_multiple_files = true;
- option java_outer_classname = "KeysProto";
- option java_package = "com.google.spanner.v1";
- option php_namespace = "Google\\Cloud\\Spanner\\V1";
- option ruby_package = "Google::Cloud::Spanner::V1";
- // KeyRange represents a range of rows in a table or index.
- //
- // A range has a start key and an end key. These keys can be open or
- // closed, indicating if the range includes rows with that key.
- //
- // Keys are represented by lists, where the ith value in the list
- // corresponds to the ith component of the table or index primary key.
- // Individual values are encoded as described
- // [here][google.spanner.v1.TypeCode].
- //
- // For example, consider the following table definition:
- //
- // CREATE TABLE UserEvents (
- // UserName STRING(MAX),
- // EventDate STRING(10)
- // ) PRIMARY KEY(UserName, EventDate);
- //
- // The following keys name rows in this table:
- //
- // ["Bob", "2014-09-23"]
- // ["Alfred", "2015-06-12"]
- //
- // Since the `UserEvents` table's `PRIMARY KEY` clause names two
- // columns, each `UserEvents` key has two elements; the first is the
- // `UserName`, and the second is the `EventDate`.
- //
- // Key ranges with multiple components are interpreted
- // lexicographically by component using the table or index key's declared
- // sort order. For example, the following range returns all events for
- // user `"Bob"` that occurred in the year 2015:
- //
- // "start_closed": ["Bob", "2015-01-01"]
- // "end_closed": ["Bob", "2015-12-31"]
- //
- // Start and end keys can omit trailing key components. This affects the
- // inclusion and exclusion of rows that exactly match the provided key
- // components: if the key is closed, then rows that exactly match the
- // provided components are included; if the key is open, then rows
- // that exactly match are not included.
- //
- // For example, the following range includes all events for `"Bob"` that
- // occurred during and after the year 2000:
- //
- // "start_closed": ["Bob", "2000-01-01"]
- // "end_closed": ["Bob"]
- //
- // The next example retrieves all events for `"Bob"`:
- //
- // "start_closed": ["Bob"]
- // "end_closed": ["Bob"]
- //
- // To retrieve events before the year 2000:
- //
- // "start_closed": ["Bob"]
- // "end_open": ["Bob", "2000-01-01"]
- //
- // The following range includes all rows in the table:
- //
- // "start_closed": []
- // "end_closed": []
- //
- // This range returns all users whose `UserName` begins with any
- // character from A to C:
- //
- // "start_closed": ["A"]
- // "end_open": ["D"]
- //
- // This range returns all users whose `UserName` begins with B:
- //
- // "start_closed": ["B"]
- // "end_open": ["C"]
- //
- // Key ranges honor column sort order. For example, suppose a table is
- // defined as follows:
- //
- // CREATE TABLE DescendingSortedTable {
- // Key INT64,
- // ...
- // ) PRIMARY KEY(Key DESC);
- //
- // The following range retrieves all rows with key values between 1
- // and 100 inclusive:
- //
- // "start_closed": ["100"]
- // "end_closed": ["1"]
- //
- // Note that 100 is passed as the start, and 1 is passed as the end,
- // because `Key` is a descending column in the schema.
- message KeyRange {
- // The start key must be provided. It can be either closed or open.
- oneof start_key_type {
- // If the start is closed, then the range includes all rows whose
- // first `len(start_closed)` key columns exactly match `start_closed`.
- google.protobuf.ListValue start_closed = 1;
- // If the start is open, then the range excludes rows whose first
- // `len(start_open)` key columns exactly match `start_open`.
- google.protobuf.ListValue start_open = 2;
- }
- // The end key must be provided. It can be either closed or open.
- oneof end_key_type {
- // If the end is closed, then the range includes all rows whose
- // first `len(end_closed)` key columns exactly match `end_closed`.
- google.protobuf.ListValue end_closed = 3;
- // If the end is open, then the range excludes rows whose first
- // `len(end_open)` key columns exactly match `end_open`.
- google.protobuf.ListValue end_open = 4;
- }
- }
- // `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All
- // the keys are expected to be in the same table or index. The keys need
- // not be sorted in any particular way.
- //
- // If the same key is specified multiple times in the set (for example
- // if two ranges, two keys, or a key and a range overlap), Cloud Spanner
- // behaves as if the key were only specified once.
- message KeySet {
- // A list of specific keys. Entries in `keys` should have exactly as
- // many elements as there are columns in the primary or index key
- // with which this `KeySet` is used. Individual key values are
- // encoded as described [here][google.spanner.v1.TypeCode].
- repeated google.protobuf.ListValue keys = 1;
- // A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
- // key range specifications.
- repeated KeyRange ranges = 2;
- // For convenience `all` can be set to `true` to indicate that this
- // `KeySet` matches all keys in the table or index. Note that any keys
- // specified in `keys` or `ranges` are only yielded once.
- bool all = 3;
- }
|