aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/googleapis/google/spanner/v1/query_plan.proto
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/googleapis/google/spanner/v1/query_plan.proto')
-rw-r--r--third_party/googleapis/google/spanner/v1/query_plan.proto128
1 files changed, 128 insertions, 0 deletions
diff --git a/third_party/googleapis/google/spanner/v1/query_plan.proto b/third_party/googleapis/google/spanner/v1/query_plan.proto
new file mode 100644
index 0000000000..b855a8ec1b
--- /dev/null
+++ b/third_party/googleapis/google/spanner/v1/query_plan.proto
@@ -0,0 +1,128 @@
+// Copyright 2017 Google Inc.
+//
+// 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/api/annotations.proto";
+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 = "QueryPlanProto";
+option java_package = "com.google.spanner.v1";
+
+
+// Node information for nodes appearing in a [QueryPlan.plan_nodes][google.spanner.v1.QueryPlan.plan_nodes].
+message PlanNode {
+ // Metadata associated with a parent-child relationship appearing in a
+ // [PlanNode][google.spanner.v1.PlanNode].
+ message ChildLink {
+ // The node to which the link points.
+ int32 child_index = 1;
+
+ // The type of the link. For example, in Hash Joins this could be used to
+ // distinguish between the build child and the probe child, or in the case
+ // of the child being an output variable, to represent the tag associated
+ // with the output variable.
+ string type = 2;
+
+ // Only present if the child node is [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] and corresponds
+ // to an output variable of the parent node. The field carries the name of
+ // the output variable.
+ // For example, a `TableScan` operator that reads rows from a table will
+ // have child links to the `SCALAR` nodes representing the output variables
+ // created for each column that is read by the operator. The corresponding
+ // `variable` fields will be set to the variable names assigned to the
+ // columns.
+ string variable = 3;
+ }
+
+ // Condensed representation of a node and its subtree. Only present for
+ // `SCALAR` [PlanNode(s)][google.spanner.v1.PlanNode].
+ message ShortRepresentation {
+ // A string representation of the expression subtree rooted at this node.
+ string description = 1;
+
+ // A mapping of (subquery variable name) -> (subquery node id) for cases
+ // where the `description` string of this node references a `SCALAR`
+ // subquery contained in the expression subtree rooted at this node. The
+ // referenced `SCALAR` subquery may not necessarily be a direct child of
+ // this node.
+ map<string, int32> subqueries = 2;
+ }
+
+ // The kind of [PlanNode][google.spanner.v1.PlanNode]. Distinguishes between the two different kinds of
+ // nodes that can appear in a query plan.
+ enum Kind {
+ // Not specified.
+ KIND_UNSPECIFIED = 0;
+
+ // Denotes a Relational operator node in the expression tree. Relational
+ // operators represent iterative processing of rows during query execution.
+ // For example, a `TableScan` operation that reads rows from a table.
+ RELATIONAL = 1;
+
+ // Denotes a Scalar node in the expression tree. Scalar nodes represent
+ // non-iterable entities in the query plan. For example, constants or
+ // arithmetic operators appearing inside predicate expressions or references
+ // to column names.
+ SCALAR = 2;
+ }
+
+ // The `PlanNode`'s index in [node list][google.spanner.v1.QueryPlan.plan_nodes].
+ int32 index = 1;
+
+ // Used to determine the type of node. May be needed for visualizing
+ // different kinds of nodes differently. For example, If the node is a
+ // [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] node, it will have a condensed representation
+ // which can be used to directly embed a description of the node in its
+ // parent.
+ Kind kind = 2;
+
+ // The display name for the node.
+ string display_name = 3;
+
+ // List of child node `index`es and their relationship to this parent.
+ repeated ChildLink child_links = 4;
+
+ // Condensed representation for [SCALAR][google.spanner.v1.PlanNode.Kind.SCALAR] nodes.
+ ShortRepresentation short_representation = 5;
+
+ // Attributes relevant to the node contained in a group of key-value pairs.
+ // For example, a Parameter Reference node could have the following
+ // information in its metadata:
+ //
+ // {
+ // "parameter_reference": "param1",
+ // "parameter_type": "array"
+ // }
+ google.protobuf.Struct metadata = 6;
+
+ // The execution statistics associated with the node, contained in a group of
+ // key-value pairs. Only present if the plan was returned as a result of a
+ // profile query. For example, number of executions, number of rows/time per
+ // execution etc.
+ google.protobuf.Struct execution_stats = 7;
+}
+
+// Contains an ordered list of nodes appearing in the query plan.
+message QueryPlan {
+ // The nodes in the query plan. Plan nodes are returned in pre-order starting
+ // with the plan root. Each [PlanNode][google.spanner.v1.PlanNode]'s `id` corresponds to its index in
+ // `plan_nodes`.
+ repeated PlanNode plan_nodes = 1;
+}