1// Copyright 2021 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Code generated by protoc-gen-go. DO NOT EDIT.
16// versions:
17// 	protoc-gen-go v1.26.0
18// 	protoc        v3.12.2
19// source: google/spanner/v1/keys.proto
20
21package spanner
22
23import (
24	reflect "reflect"
25	sync "sync"
26
27	_ "google.golang.org/genproto/googleapis/api/annotations"
28	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
29	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
30	structpb "google.golang.org/protobuf/types/known/structpb"
31)
32
33const (
34	// Verify that this generated code is sufficiently up-to-date.
35	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
36	// Verify that runtime/protoimpl is sufficiently up-to-date.
37	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
38)
39
40// KeyRange represents a range of rows in a table or index.
41//
42// A range has a start key and an end key. These keys can be open or
43// closed, indicating if the range includes rows with that key.
44//
45// Keys are represented by lists, where the ith value in the list
46// corresponds to the ith component of the table or index primary key.
47// Individual values are encoded as described
48// [here][google.spanner.v1.TypeCode].
49//
50// For example, consider the following table definition:
51//
52//     CREATE TABLE UserEvents (
53//       UserName STRING(MAX),
54//       EventDate STRING(10)
55//     ) PRIMARY KEY(UserName, EventDate);
56//
57// The following keys name rows in this table:
58//
59//     ["Bob", "2014-09-23"]
60//     ["Alfred", "2015-06-12"]
61//
62// Since the `UserEvents` table's `PRIMARY KEY` clause names two
63// columns, each `UserEvents` key has two elements; the first is the
64// `UserName`, and the second is the `EventDate`.
65//
66// Key ranges with multiple components are interpreted
67// lexicographically by component using the table or index key's declared
68// sort order. For example, the following range returns all events for
69// user `"Bob"` that occurred in the year 2015:
70//
71//     "start_closed": ["Bob", "2015-01-01"]
72//     "end_closed": ["Bob", "2015-12-31"]
73//
74// Start and end keys can omit trailing key components. This affects the
75// inclusion and exclusion of rows that exactly match the provided key
76// components: if the key is closed, then rows that exactly match the
77// provided components are included; if the key is open, then rows
78// that exactly match are not included.
79//
80// For example, the following range includes all events for `"Bob"` that
81// occurred during and after the year 2000:
82//
83//     "start_closed": ["Bob", "2000-01-01"]
84//     "end_closed": ["Bob"]
85//
86// The next example retrieves all events for `"Bob"`:
87//
88//     "start_closed": ["Bob"]
89//     "end_closed": ["Bob"]
90//
91// To retrieve events before the year 2000:
92//
93//     "start_closed": ["Bob"]
94//     "end_open": ["Bob", "2000-01-01"]
95//
96// The following range includes all rows in the table:
97//
98//     "start_closed": []
99//     "end_closed": []
100//
101// This range returns all users whose `UserName` begins with any
102// character from A to C:
103//
104//     "start_closed": ["A"]
105//     "end_open": ["D"]
106//
107// This range returns all users whose `UserName` begins with B:
108//
109//     "start_closed": ["B"]
110//     "end_open": ["C"]
111//
112// Key ranges honor column sort order. For example, suppose a table is
113// defined as follows:
114//
115//     CREATE TABLE DescendingSortedTable {
116//       Key INT64,
117//       ...
118//     ) PRIMARY KEY(Key DESC);
119//
120// The following range retrieves all rows with key values between 1
121// and 100 inclusive:
122//
123//     "start_closed": ["100"]
124//     "end_closed": ["1"]
125//
126// Note that 100 is passed as the start, and 1 is passed as the end,
127// because `Key` is a descending column in the schema.
128type KeyRange struct {
129	state         protoimpl.MessageState
130	sizeCache     protoimpl.SizeCache
131	unknownFields protoimpl.UnknownFields
132
133	// The start key must be provided. It can be either closed or open.
134	//
135	// Types that are assignable to StartKeyType:
136	//	*KeyRange_StartClosed
137	//	*KeyRange_StartOpen
138	StartKeyType isKeyRange_StartKeyType `protobuf_oneof:"start_key_type"`
139	// The end key must be provided. It can be either closed or open.
140	//
141	// Types that are assignable to EndKeyType:
142	//	*KeyRange_EndClosed
143	//	*KeyRange_EndOpen
144	EndKeyType isKeyRange_EndKeyType `protobuf_oneof:"end_key_type"`
145}
146
147func (x *KeyRange) Reset() {
148	*x = KeyRange{}
149	if protoimpl.UnsafeEnabled {
150		mi := &file_google_spanner_v1_keys_proto_msgTypes[0]
151		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
152		ms.StoreMessageInfo(mi)
153	}
154}
155
156func (x *KeyRange) String() string {
157	return protoimpl.X.MessageStringOf(x)
158}
159
160func (*KeyRange) ProtoMessage() {}
161
162func (x *KeyRange) ProtoReflect() protoreflect.Message {
163	mi := &file_google_spanner_v1_keys_proto_msgTypes[0]
164	if protoimpl.UnsafeEnabled && x != nil {
165		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
166		if ms.LoadMessageInfo() == nil {
167			ms.StoreMessageInfo(mi)
168		}
169		return ms
170	}
171	return mi.MessageOf(x)
172}
173
174// Deprecated: Use KeyRange.ProtoReflect.Descriptor instead.
175func (*KeyRange) Descriptor() ([]byte, []int) {
176	return file_google_spanner_v1_keys_proto_rawDescGZIP(), []int{0}
177}
178
179func (m *KeyRange) GetStartKeyType() isKeyRange_StartKeyType {
180	if m != nil {
181		return m.StartKeyType
182	}
183	return nil
184}
185
186func (x *KeyRange) GetStartClosed() *structpb.ListValue {
187	if x, ok := x.GetStartKeyType().(*KeyRange_StartClosed); ok {
188		return x.StartClosed
189	}
190	return nil
191}
192
193func (x *KeyRange) GetStartOpen() *structpb.ListValue {
194	if x, ok := x.GetStartKeyType().(*KeyRange_StartOpen); ok {
195		return x.StartOpen
196	}
197	return nil
198}
199
200func (m *KeyRange) GetEndKeyType() isKeyRange_EndKeyType {
201	if m != nil {
202		return m.EndKeyType
203	}
204	return nil
205}
206
207func (x *KeyRange) GetEndClosed() *structpb.ListValue {
208	if x, ok := x.GetEndKeyType().(*KeyRange_EndClosed); ok {
209		return x.EndClosed
210	}
211	return nil
212}
213
214func (x *KeyRange) GetEndOpen() *structpb.ListValue {
215	if x, ok := x.GetEndKeyType().(*KeyRange_EndOpen); ok {
216		return x.EndOpen
217	}
218	return nil
219}
220
221type isKeyRange_StartKeyType interface {
222	isKeyRange_StartKeyType()
223}
224
225type KeyRange_StartClosed struct {
226	// If the start is closed, then the range includes all rows whose
227	// first `len(start_closed)` key columns exactly match `start_closed`.
228	StartClosed *structpb.ListValue `protobuf:"bytes,1,opt,name=start_closed,json=startClosed,proto3,oneof"`
229}
230
231type KeyRange_StartOpen struct {
232	// If the start is open, then the range excludes rows whose first
233	// `len(start_open)` key columns exactly match `start_open`.
234	StartOpen *structpb.ListValue `protobuf:"bytes,2,opt,name=start_open,json=startOpen,proto3,oneof"`
235}
236
237func (*KeyRange_StartClosed) isKeyRange_StartKeyType() {}
238
239func (*KeyRange_StartOpen) isKeyRange_StartKeyType() {}
240
241type isKeyRange_EndKeyType interface {
242	isKeyRange_EndKeyType()
243}
244
245type KeyRange_EndClosed struct {
246	// If the end is closed, then the range includes all rows whose
247	// first `len(end_closed)` key columns exactly match `end_closed`.
248	EndClosed *structpb.ListValue `protobuf:"bytes,3,opt,name=end_closed,json=endClosed,proto3,oneof"`
249}
250
251type KeyRange_EndOpen struct {
252	// If the end is open, then the range excludes rows whose first
253	// `len(end_open)` key columns exactly match `end_open`.
254	EndOpen *structpb.ListValue `protobuf:"bytes,4,opt,name=end_open,json=endOpen,proto3,oneof"`
255}
256
257func (*KeyRange_EndClosed) isKeyRange_EndKeyType() {}
258
259func (*KeyRange_EndOpen) isKeyRange_EndKeyType() {}
260
261// `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All
262// the keys are expected to be in the same table or index. The keys need
263// not be sorted in any particular way.
264//
265// If the same key is specified multiple times in the set (for example
266// if two ranges, two keys, or a key and a range overlap), Cloud Spanner
267// behaves as if the key were only specified once.
268type KeySet struct {
269	state         protoimpl.MessageState
270	sizeCache     protoimpl.SizeCache
271	unknownFields protoimpl.UnknownFields
272
273	// A list of specific keys. Entries in `keys` should have exactly as
274	// many elements as there are columns in the primary or index key
275	// with which this `KeySet` is used.  Individual key values are
276	// encoded as described [here][google.spanner.v1.TypeCode].
277	Keys []*structpb.ListValue `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"`
278	// A list of key ranges. See [KeyRange][google.spanner.v1.KeyRange] for more information about
279	// key range specifications.
280	Ranges []*KeyRange `protobuf:"bytes,2,rep,name=ranges,proto3" json:"ranges,omitempty"`
281	// For convenience `all` can be set to `true` to indicate that this
282	// `KeySet` matches all keys in the table or index. Note that any keys
283	// specified in `keys` or `ranges` are only yielded once.
284	All bool `protobuf:"varint,3,opt,name=all,proto3" json:"all,omitempty"`
285}
286
287func (x *KeySet) Reset() {
288	*x = KeySet{}
289	if protoimpl.UnsafeEnabled {
290		mi := &file_google_spanner_v1_keys_proto_msgTypes[1]
291		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
292		ms.StoreMessageInfo(mi)
293	}
294}
295
296func (x *KeySet) String() string {
297	return protoimpl.X.MessageStringOf(x)
298}
299
300func (*KeySet) ProtoMessage() {}
301
302func (x *KeySet) ProtoReflect() protoreflect.Message {
303	mi := &file_google_spanner_v1_keys_proto_msgTypes[1]
304	if protoimpl.UnsafeEnabled && x != nil {
305		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
306		if ms.LoadMessageInfo() == nil {
307			ms.StoreMessageInfo(mi)
308		}
309		return ms
310	}
311	return mi.MessageOf(x)
312}
313
314// Deprecated: Use KeySet.ProtoReflect.Descriptor instead.
315func (*KeySet) Descriptor() ([]byte, []int) {
316	return file_google_spanner_v1_keys_proto_rawDescGZIP(), []int{1}
317}
318
319func (x *KeySet) GetKeys() []*structpb.ListValue {
320	if x != nil {
321		return x.Keys
322	}
323	return nil
324}
325
326func (x *KeySet) GetRanges() []*KeyRange {
327	if x != nil {
328		return x.Ranges
329	}
330	return nil
331}
332
333func (x *KeySet) GetAll() bool {
334	if x != nil {
335		return x.All
336	}
337	return false
338}
339
340var File_google_spanner_v1_keys_proto protoreflect.FileDescriptor
341
342var file_google_spanner_v1_keys_proto_rawDesc = []byte{
343	0x0a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72,
344	0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11,
345	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76,
346	0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
347	0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
348	0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f,
349	0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa0, 0x02,
350	0x0a, 0x08, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x74,
351	0x61, 0x72, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
352	0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
353	0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0b,
354	0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x0a, 0x73,
355	0x74, 0x61, 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
356	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
357	0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x73,
358	0x74, 0x61, 0x72, 0x74, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x3b, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f,
359	0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
360	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c,
361	0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x01, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x43,
362	0x6c, 0x6f, 0x73, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x70, 0x65,
363	0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
364	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61,
365	0x6c, 0x75, 0x65, 0x48, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x65, 0x6e, 0x42, 0x10,
366	0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65,
367	0x42, 0x0e, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65,
368	0x22, 0x7f, 0x0a, 0x06, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6b, 0x65,
369	0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
370	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56,
371	0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x72, 0x61,
372	0x6e, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
373	0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b,
374	0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12,
375	0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c,
376	0x6c, 0x42, 0xaf, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
377	0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x09, 0x4b, 0x65, 0x79,
378	0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
379	0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70,
380	0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f,
381	0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x70, 0x61, 0x6e, 0x6e,
382	0x65, 0x72, 0xaa, 0x02, 0x17, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75,
383	0x64, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x17, 0x47,
384	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x53, 0x70, 0x61, 0x6e,
385	0x6e, 0x65, 0x72, 0x5c, 0x56, 0x31, 0xea, 0x02, 0x1a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a,
386	0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x3a,
387	0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
388}
389
390var (
391	file_google_spanner_v1_keys_proto_rawDescOnce sync.Once
392	file_google_spanner_v1_keys_proto_rawDescData = file_google_spanner_v1_keys_proto_rawDesc
393)
394
395func file_google_spanner_v1_keys_proto_rawDescGZIP() []byte {
396	file_google_spanner_v1_keys_proto_rawDescOnce.Do(func() {
397		file_google_spanner_v1_keys_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_spanner_v1_keys_proto_rawDescData)
398	})
399	return file_google_spanner_v1_keys_proto_rawDescData
400}
401
402var file_google_spanner_v1_keys_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
403var file_google_spanner_v1_keys_proto_goTypes = []interface{}{
404	(*KeyRange)(nil),           // 0: google.spanner.v1.KeyRange
405	(*KeySet)(nil),             // 1: google.spanner.v1.KeySet
406	(*structpb.ListValue)(nil), // 2: google.protobuf.ListValue
407}
408var file_google_spanner_v1_keys_proto_depIdxs = []int32{
409	2, // 0: google.spanner.v1.KeyRange.start_closed:type_name -> google.protobuf.ListValue
410	2, // 1: google.spanner.v1.KeyRange.start_open:type_name -> google.protobuf.ListValue
411	2, // 2: google.spanner.v1.KeyRange.end_closed:type_name -> google.protobuf.ListValue
412	2, // 3: google.spanner.v1.KeyRange.end_open:type_name -> google.protobuf.ListValue
413	2, // 4: google.spanner.v1.KeySet.keys:type_name -> google.protobuf.ListValue
414	0, // 5: google.spanner.v1.KeySet.ranges:type_name -> google.spanner.v1.KeyRange
415	6, // [6:6] is the sub-list for method output_type
416	6, // [6:6] is the sub-list for method input_type
417	6, // [6:6] is the sub-list for extension type_name
418	6, // [6:6] is the sub-list for extension extendee
419	0, // [0:6] is the sub-list for field type_name
420}
421
422func init() { file_google_spanner_v1_keys_proto_init() }
423func file_google_spanner_v1_keys_proto_init() {
424	if File_google_spanner_v1_keys_proto != nil {
425		return
426	}
427	if !protoimpl.UnsafeEnabled {
428		file_google_spanner_v1_keys_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
429			switch v := v.(*KeyRange); i {
430			case 0:
431				return &v.state
432			case 1:
433				return &v.sizeCache
434			case 2:
435				return &v.unknownFields
436			default:
437				return nil
438			}
439		}
440		file_google_spanner_v1_keys_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
441			switch v := v.(*KeySet); i {
442			case 0:
443				return &v.state
444			case 1:
445				return &v.sizeCache
446			case 2:
447				return &v.unknownFields
448			default:
449				return nil
450			}
451		}
452	}
453	file_google_spanner_v1_keys_proto_msgTypes[0].OneofWrappers = []interface{}{
454		(*KeyRange_StartClosed)(nil),
455		(*KeyRange_StartOpen)(nil),
456		(*KeyRange_EndClosed)(nil),
457		(*KeyRange_EndOpen)(nil),
458	}
459	type x struct{}
460	out := protoimpl.TypeBuilder{
461		File: protoimpl.DescBuilder{
462			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
463			RawDescriptor: file_google_spanner_v1_keys_proto_rawDesc,
464			NumEnums:      0,
465			NumMessages:   2,
466			NumExtensions: 0,
467			NumServices:   0,
468		},
469		GoTypes:           file_google_spanner_v1_keys_proto_goTypes,
470		DependencyIndexes: file_google_spanner_v1_keys_proto_depIdxs,
471		MessageInfos:      file_google_spanner_v1_keys_proto_msgTypes,
472	}.Build()
473	File_google_spanner_v1_keys_proto = out.File
474	file_google_spanner_v1_keys_proto_rawDesc = nil
475	file_google_spanner_v1_keys_proto_goTypes = nil
476	file_google_spanner_v1_keys_proto_depIdxs = nil
477}
478