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.25.0-devel
18// 	protoc        v3.13.0
19// source: google/spanner/v1/query_plan.proto
20
21package spanner
22
23import (
24	reflect "reflect"
25	sync "sync"
26
27	proto "github.com/golang/protobuf/proto"
28	_ "google.golang.org/genproto/googleapis/api/annotations"
29	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
30	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
31	structpb "google.golang.org/protobuf/types/known/structpb"
32)
33
34const (
35	// Verify that this generated code is sufficiently up-to-date.
36	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
37	// Verify that runtime/protoimpl is sufficiently up-to-date.
38	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
39)
40
41// This is a compile-time assertion that a sufficiently up-to-date version
42// of the legacy proto package is being used.
43const _ = proto.ProtoPackageIsVersion4
44
45// The kind of [PlanNode][google.spanner.v1.PlanNode]. Distinguishes between the two different kinds of
46// nodes that can appear in a query plan.
47type PlanNode_Kind int32
48
49const (
50	// Not specified.
51	PlanNode_KIND_UNSPECIFIED PlanNode_Kind = 0
52	// Denotes a Relational operator node in the expression tree. Relational
53	// operators represent iterative processing of rows during query execution.
54	// For example, a `TableScan` operation that reads rows from a table.
55	PlanNode_RELATIONAL PlanNode_Kind = 1
56	// Denotes a Scalar node in the expression tree. Scalar nodes represent
57	// non-iterable entities in the query plan. For example, constants or
58	// arithmetic operators appearing inside predicate expressions or references
59	// to column names.
60	PlanNode_SCALAR PlanNode_Kind = 2
61)
62
63// Enum value maps for PlanNode_Kind.
64var (
65	PlanNode_Kind_name = map[int32]string{
66		0: "KIND_UNSPECIFIED",
67		1: "RELATIONAL",
68		2: "SCALAR",
69	}
70	PlanNode_Kind_value = map[string]int32{
71		"KIND_UNSPECIFIED": 0,
72		"RELATIONAL":       1,
73		"SCALAR":           2,
74	}
75)
76
77func (x PlanNode_Kind) Enum() *PlanNode_Kind {
78	p := new(PlanNode_Kind)
79	*p = x
80	return p
81}
82
83func (x PlanNode_Kind) String() string {
84	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
85}
86
87func (PlanNode_Kind) Descriptor() protoreflect.EnumDescriptor {
88	return file_google_spanner_v1_query_plan_proto_enumTypes[0].Descriptor()
89}
90
91func (PlanNode_Kind) Type() protoreflect.EnumType {
92	return &file_google_spanner_v1_query_plan_proto_enumTypes[0]
93}
94
95func (x PlanNode_Kind) Number() protoreflect.EnumNumber {
96	return protoreflect.EnumNumber(x)
97}
98
99// Deprecated: Use PlanNode_Kind.Descriptor instead.
100func (PlanNode_Kind) EnumDescriptor() ([]byte, []int) {
101	return file_google_spanner_v1_query_plan_proto_rawDescGZIP(), []int{0, 0}
102}
103
104// Node information for nodes appearing in a [QueryPlan.plan_nodes][google.spanner.v1.QueryPlan.plan_nodes].
105type PlanNode struct {
106	state         protoimpl.MessageState
107	sizeCache     protoimpl.SizeCache
108	unknownFields protoimpl.UnknownFields
109
110	// The `PlanNode`'s index in [node list][google.spanner.v1.QueryPlan.plan_nodes].
111	Index int32 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"`
112	// Used to determine the type of node. May be needed for visualizing
113	// different kinds of nodes differently. For example, If the node is a
114	// [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
115	// which can be used to directly embed a description of the node in its
116	// parent.
117	Kind PlanNode_Kind `protobuf:"varint,2,opt,name=kind,proto3,enum=google.spanner.v1.PlanNode_Kind" json:"kind,omitempty"`
118	// The display name for the node.
119	DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
120	// List of child node `index`es and their relationship to this parent.
121	ChildLinks []*PlanNode_ChildLink `protobuf:"bytes,4,rep,name=child_links,json=childLinks,proto3" json:"child_links,omitempty"`
122	// Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
123	ShortRepresentation *PlanNode_ShortRepresentation `protobuf:"bytes,5,opt,name=short_representation,json=shortRepresentation,proto3" json:"short_representation,omitempty"`
124	// Attributes relevant to the node contained in a group of key-value pairs.
125	// For example, a Parameter Reference node could have the following
126	// information in its metadata:
127	//
128	//     {
129	//       "parameter_reference": "param1",
130	//       "parameter_type": "array"
131	//     }
132	Metadata *structpb.Struct `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"`
133	// The execution statistics associated with the node, contained in a group of
134	// key-value pairs. Only present if the plan was returned as a result of a
135	// profile query. For example, number of executions, number of rows/time per
136	// execution etc.
137	ExecutionStats *structpb.Struct `protobuf:"bytes,7,opt,name=execution_stats,json=executionStats,proto3" json:"execution_stats,omitempty"`
138}
139
140func (x *PlanNode) Reset() {
141	*x = PlanNode{}
142	if protoimpl.UnsafeEnabled {
143		mi := &file_google_spanner_v1_query_plan_proto_msgTypes[0]
144		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
145		ms.StoreMessageInfo(mi)
146	}
147}
148
149func (x *PlanNode) String() string {
150	return protoimpl.X.MessageStringOf(x)
151}
152
153func (*PlanNode) ProtoMessage() {}
154
155func (x *PlanNode) ProtoReflect() protoreflect.Message {
156	mi := &file_google_spanner_v1_query_plan_proto_msgTypes[0]
157	if protoimpl.UnsafeEnabled && x != nil {
158		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
159		if ms.LoadMessageInfo() == nil {
160			ms.StoreMessageInfo(mi)
161		}
162		return ms
163	}
164	return mi.MessageOf(x)
165}
166
167// Deprecated: Use PlanNode.ProtoReflect.Descriptor instead.
168func (*PlanNode) Descriptor() ([]byte, []int) {
169	return file_google_spanner_v1_query_plan_proto_rawDescGZIP(), []int{0}
170}
171
172func (x *PlanNode) GetIndex() int32 {
173	if x != nil {
174		return x.Index
175	}
176	return 0
177}
178
179func (x *PlanNode) GetKind() PlanNode_Kind {
180	if x != nil {
181		return x.Kind
182	}
183	return PlanNode_KIND_UNSPECIFIED
184}
185
186func (x *PlanNode) GetDisplayName() string {
187	if x != nil {
188		return x.DisplayName
189	}
190	return ""
191}
192
193func (x *PlanNode) GetChildLinks() []*PlanNode_ChildLink {
194	if x != nil {
195		return x.ChildLinks
196	}
197	return nil
198}
199
200func (x *PlanNode) GetShortRepresentation() *PlanNode_ShortRepresentation {
201	if x != nil {
202		return x.ShortRepresentation
203	}
204	return nil
205}
206
207func (x *PlanNode) GetMetadata() *structpb.Struct {
208	if x != nil {
209		return x.Metadata
210	}
211	return nil
212}
213
214func (x *PlanNode) GetExecutionStats() *structpb.Struct {
215	if x != nil {
216		return x.ExecutionStats
217	}
218	return nil
219}
220
221// Contains an ordered list of nodes appearing in the query plan.
222type QueryPlan struct {
223	state         protoimpl.MessageState
224	sizeCache     protoimpl.SizeCache
225	unknownFields protoimpl.UnknownFields
226
227	// The nodes in the query plan. Plan nodes are returned in pre-order starting
228	// with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
229	// `plan_nodes`.
230	PlanNodes []*PlanNode `protobuf:"bytes,1,rep,name=plan_nodes,json=planNodes,proto3" json:"plan_nodes,omitempty"`
231}
232
233func (x *QueryPlan) Reset() {
234	*x = QueryPlan{}
235	if protoimpl.UnsafeEnabled {
236		mi := &file_google_spanner_v1_query_plan_proto_msgTypes[1]
237		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
238		ms.StoreMessageInfo(mi)
239	}
240}
241
242func (x *QueryPlan) String() string {
243	return protoimpl.X.MessageStringOf(x)
244}
245
246func (*QueryPlan) ProtoMessage() {}
247
248func (x *QueryPlan) ProtoReflect() protoreflect.Message {
249	mi := &file_google_spanner_v1_query_plan_proto_msgTypes[1]
250	if protoimpl.UnsafeEnabled && x != nil {
251		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
252		if ms.LoadMessageInfo() == nil {
253			ms.StoreMessageInfo(mi)
254		}
255		return ms
256	}
257	return mi.MessageOf(x)
258}
259
260// Deprecated: Use QueryPlan.ProtoReflect.Descriptor instead.
261func (*QueryPlan) Descriptor() ([]byte, []int) {
262	return file_google_spanner_v1_query_plan_proto_rawDescGZIP(), []int{1}
263}
264
265func (x *QueryPlan) GetPlanNodes() []*PlanNode {
266	if x != nil {
267		return x.PlanNodes
268	}
269	return nil
270}
271
272// Metadata associated with a parent-child relationship appearing in a
273// [PlanNode][google.spanner.v1.PlanNode].
274type PlanNode_ChildLink struct {
275	state         protoimpl.MessageState
276	sizeCache     protoimpl.SizeCache
277	unknownFields protoimpl.UnknownFields
278
279	// The node to which the link points.
280	ChildIndex int32 `protobuf:"varint,1,opt,name=child_index,json=childIndex,proto3" json:"child_index,omitempty"`
281	// The type of the link. For example, in Hash Joins this could be used to
282	// distinguish between the build child and the probe child, or in the case
283	// of the child being an output variable, to represent the tag associated
284	// with the output variable.
285	Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
286	// Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
287	// to an output variable of the parent node. The field carries the name of
288	// the output variable.
289	// For example, a `TableScan` operator that reads rows from a table will
290	// have child links to the `SCALAR` nodes representing the output variables
291	// created for each column that is read by the operator. The corresponding
292	// `variable` fields will be set to the variable names assigned to the
293	// columns.
294	Variable string `protobuf:"bytes,3,opt,name=variable,proto3" json:"variable,omitempty"`
295}
296
297func (x *PlanNode_ChildLink) Reset() {
298	*x = PlanNode_ChildLink{}
299	if protoimpl.UnsafeEnabled {
300		mi := &file_google_spanner_v1_query_plan_proto_msgTypes[2]
301		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
302		ms.StoreMessageInfo(mi)
303	}
304}
305
306func (x *PlanNode_ChildLink) String() string {
307	return protoimpl.X.MessageStringOf(x)
308}
309
310func (*PlanNode_ChildLink) ProtoMessage() {}
311
312func (x *PlanNode_ChildLink) ProtoReflect() protoreflect.Message {
313	mi := &file_google_spanner_v1_query_plan_proto_msgTypes[2]
314	if protoimpl.UnsafeEnabled && x != nil {
315		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
316		if ms.LoadMessageInfo() == nil {
317			ms.StoreMessageInfo(mi)
318		}
319		return ms
320	}
321	return mi.MessageOf(x)
322}
323
324// Deprecated: Use PlanNode_ChildLink.ProtoReflect.Descriptor instead.
325func (*PlanNode_ChildLink) Descriptor() ([]byte, []int) {
326	return file_google_spanner_v1_query_plan_proto_rawDescGZIP(), []int{0, 0}
327}
328
329func (x *PlanNode_ChildLink) GetChildIndex() int32 {
330	if x != nil {
331		return x.ChildIndex
332	}
333	return 0
334}
335
336func (x *PlanNode_ChildLink) GetType() string {
337	if x != nil {
338		return x.Type
339	}
340	return ""
341}
342
343func (x *PlanNode_ChildLink) GetVariable() string {
344	if x != nil {
345		return x.Variable
346	}
347	return ""
348}
349
350// Condensed representation of a node and its subtree. Only present for
351// `SCALAR` [PlanNode(s)][google.spanner.v1.PlanNode].
352type PlanNode_ShortRepresentation struct {
353	state         protoimpl.MessageState
354	sizeCache     protoimpl.SizeCache
355	unknownFields protoimpl.UnknownFields
356
357	// A string representation of the expression subtree rooted at this node.
358	Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"`
359	// A mapping of (subquery variable name) -> (subquery node id) for cases
360	// where the `description` string of this node references a `SCALAR`
361	// subquery contained in the expression subtree rooted at this node. The
362	// referenced `SCALAR` subquery may not necessarily be a direct child of
363	// this node.
364	Subqueries map[string]int32 `protobuf:"bytes,2,rep,name=subqueries,proto3" json:"subqueries,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
365}
366
367func (x *PlanNode_ShortRepresentation) Reset() {
368	*x = PlanNode_ShortRepresentation{}
369	if protoimpl.UnsafeEnabled {
370		mi := &file_google_spanner_v1_query_plan_proto_msgTypes[3]
371		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
372		ms.StoreMessageInfo(mi)
373	}
374}
375
376func (x *PlanNode_ShortRepresentation) String() string {
377	return protoimpl.X.MessageStringOf(x)
378}
379
380func (*PlanNode_ShortRepresentation) ProtoMessage() {}
381
382func (x *PlanNode_ShortRepresentation) ProtoReflect() protoreflect.Message {
383	mi := &file_google_spanner_v1_query_plan_proto_msgTypes[3]
384	if protoimpl.UnsafeEnabled && x != nil {
385		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
386		if ms.LoadMessageInfo() == nil {
387			ms.StoreMessageInfo(mi)
388		}
389		return ms
390	}
391	return mi.MessageOf(x)
392}
393
394// Deprecated: Use PlanNode_ShortRepresentation.ProtoReflect.Descriptor instead.
395func (*PlanNode_ShortRepresentation) Descriptor() ([]byte, []int) {
396	return file_google_spanner_v1_query_plan_proto_rawDescGZIP(), []int{0, 1}
397}
398
399func (x *PlanNode_ShortRepresentation) GetDescription() string {
400	if x != nil {
401		return x.Description
402	}
403	return ""
404}
405
406func (x *PlanNode_ShortRepresentation) GetSubqueries() map[string]int32 {
407	if x != nil {
408		return x.Subqueries
409	}
410	return nil
411}
412
413var File_google_spanner_v1_query_plan_proto protoreflect.FileDescriptor
414
415var file_google_spanner_v1_query_plan_proto_rawDesc = []byte{
416	0x0a, 0x22, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72,
417	0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x2e, 0x70,
418	0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61,
419	0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
420	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e,
421	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70,
422	0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72,
423	0x6f, 0x74, 0x6f, 0x22, 0x8e, 0x06, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x6e, 0x4e, 0x6f, 0x64, 0x65,
424	0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
425	0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x34, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02,
426	0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70,
427	0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x4e, 0x6f, 0x64,
428	0x65, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x21, 0x0a, 0x0c,
429	0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
430	0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12,
431	0x46, 0x0a, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x04,
432	0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70,
433	0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x4e, 0x6f, 0x64,
434	0x65, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x0a, 0x63, 0x68, 0x69,
435	0x6c, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x62, 0x0a, 0x14, 0x73, 0x68, 0x6f, 0x72, 0x74,
436	0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
437	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
438	0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x4e, 0x6f,
439	0x64, 0x65, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
440	0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70,
441	0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x08, 0x6d,
442	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
443	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
444	0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
445	0x12, 0x40, 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74,
446	0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
447	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75,
448	0x63, 0x74, 0x52, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61,
449	0x74, 0x73, 0x1a, 0x5c, 0x0a, 0x09, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12,
450	0x1f, 0x0a, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01,
451	0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78,
452	0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
453	0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65,
454	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65,
455	0x1a, 0xd7, 0x01, 0x0a, 0x13, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73,
456	0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63,
457	0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64,
458	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x0a, 0x73, 0x75,
459	0x62, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f,
460	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e,
461	0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x53, 0x68, 0x6f, 0x72,
462	0x74, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
463	0x53, 0x75, 0x62, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
464	0x0a, 0x73, 0x75, 0x62, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x53,
465	0x75, 0x62, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
466	0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
467	0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
468	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x38, 0x0a, 0x04, 0x4b, 0x69,
469	0x6e, 0x64, 0x12, 0x14, 0x0a, 0x10, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
470	0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x4c, 0x41,
471	0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x43, 0x41, 0x4c,
472	0x41, 0x52, 0x10, 0x02, 0x22, 0x47, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61,
473	0x6e, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18,
474	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73,
475	0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x4e, 0x6f,
476	0x64, 0x65, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x42, 0xb4, 0x01,
477	0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61,
478	0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c,
479	0x61, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
480	0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e,
481	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73,
482	0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x70, 0x61, 0x6e,
483	0x6e, 0x65, 0x72, 0xaa, 0x02, 0x17, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f,
484	0x75, 0x64, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x17,
485	0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x53, 0x70, 0x61,
486	0x6e, 0x6e, 0x65, 0x72, 0x5c, 0x56, 0x31, 0xea, 0x02, 0x1a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
487	0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72,
488	0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
489}
490
491var (
492	file_google_spanner_v1_query_plan_proto_rawDescOnce sync.Once
493	file_google_spanner_v1_query_plan_proto_rawDescData = file_google_spanner_v1_query_plan_proto_rawDesc
494)
495
496func file_google_spanner_v1_query_plan_proto_rawDescGZIP() []byte {
497	file_google_spanner_v1_query_plan_proto_rawDescOnce.Do(func() {
498		file_google_spanner_v1_query_plan_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_spanner_v1_query_plan_proto_rawDescData)
499	})
500	return file_google_spanner_v1_query_plan_proto_rawDescData
501}
502
503var file_google_spanner_v1_query_plan_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
504var file_google_spanner_v1_query_plan_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
505var file_google_spanner_v1_query_plan_proto_goTypes = []interface{}{
506	(PlanNode_Kind)(0),                   // 0: google.spanner.v1.PlanNode.Kind
507	(*PlanNode)(nil),                     // 1: google.spanner.v1.PlanNode
508	(*QueryPlan)(nil),                    // 2: google.spanner.v1.QueryPlan
509	(*PlanNode_ChildLink)(nil),           // 3: google.spanner.v1.PlanNode.ChildLink
510	(*PlanNode_ShortRepresentation)(nil), // 4: google.spanner.v1.PlanNode.ShortRepresentation
511	nil,                                  // 5: google.spanner.v1.PlanNode.ShortRepresentation.SubqueriesEntry
512	(*structpb.Struct)(nil),              // 6: google.protobuf.Struct
513}
514var file_google_spanner_v1_query_plan_proto_depIdxs = []int32{
515	0, // 0: google.spanner.v1.PlanNode.kind:type_name -> google.spanner.v1.PlanNode.Kind
516	3, // 1: google.spanner.v1.PlanNode.child_links:type_name -> google.spanner.v1.PlanNode.ChildLink
517	4, // 2: google.spanner.v1.PlanNode.short_representation:type_name -> google.spanner.v1.PlanNode.ShortRepresentation
518	6, // 3: google.spanner.v1.PlanNode.metadata:type_name -> google.protobuf.Struct
519	6, // 4: google.spanner.v1.PlanNode.execution_stats:type_name -> google.protobuf.Struct
520	1, // 5: google.spanner.v1.QueryPlan.plan_nodes:type_name -> google.spanner.v1.PlanNode
521	5, // 6: google.spanner.v1.PlanNode.ShortRepresentation.subqueries:type_name -> google.spanner.v1.PlanNode.ShortRepresentation.SubqueriesEntry
522	7, // [7:7] is the sub-list for method output_type
523	7, // [7:7] is the sub-list for method input_type
524	7, // [7:7] is the sub-list for extension type_name
525	7, // [7:7] is the sub-list for extension extendee
526	0, // [0:7] is the sub-list for field type_name
527}
528
529func init() { file_google_spanner_v1_query_plan_proto_init() }
530func file_google_spanner_v1_query_plan_proto_init() {
531	if File_google_spanner_v1_query_plan_proto != nil {
532		return
533	}
534	if !protoimpl.UnsafeEnabled {
535		file_google_spanner_v1_query_plan_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
536			switch v := v.(*PlanNode); i {
537			case 0:
538				return &v.state
539			case 1:
540				return &v.sizeCache
541			case 2:
542				return &v.unknownFields
543			default:
544				return nil
545			}
546		}
547		file_google_spanner_v1_query_plan_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
548			switch v := v.(*QueryPlan); i {
549			case 0:
550				return &v.state
551			case 1:
552				return &v.sizeCache
553			case 2:
554				return &v.unknownFields
555			default:
556				return nil
557			}
558		}
559		file_google_spanner_v1_query_plan_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
560			switch v := v.(*PlanNode_ChildLink); i {
561			case 0:
562				return &v.state
563			case 1:
564				return &v.sizeCache
565			case 2:
566				return &v.unknownFields
567			default:
568				return nil
569			}
570		}
571		file_google_spanner_v1_query_plan_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
572			switch v := v.(*PlanNode_ShortRepresentation); i {
573			case 0:
574				return &v.state
575			case 1:
576				return &v.sizeCache
577			case 2:
578				return &v.unknownFields
579			default:
580				return nil
581			}
582		}
583	}
584	type x struct{}
585	out := protoimpl.TypeBuilder{
586		File: protoimpl.DescBuilder{
587			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
588			RawDescriptor: file_google_spanner_v1_query_plan_proto_rawDesc,
589			NumEnums:      1,
590			NumMessages:   5,
591			NumExtensions: 0,
592			NumServices:   0,
593		},
594		GoTypes:           file_google_spanner_v1_query_plan_proto_goTypes,
595		DependencyIndexes: file_google_spanner_v1_query_plan_proto_depIdxs,
596		EnumInfos:         file_google_spanner_v1_query_plan_proto_enumTypes,
597		MessageInfos:      file_google_spanner_v1_query_plan_proto_msgTypes,
598	}.Build()
599	File_google_spanner_v1_query_plan_proto = out.File
600	file_google_spanner_v1_query_plan_proto_rawDesc = nil
601	file_google_spanner_v1_query_plan_proto_goTypes = nil
602	file_google_spanner_v1_query_plan_proto_depIdxs = nil
603}
604