datafusion_proto/generated/
prost.rs

1// This file is @generated by prost-build.
2/// logical plan
3/// LogicalPlan is a nested type
4#[derive(Clone, PartialEq, ::prost::Message)]
5pub struct LogicalPlanNode {
6    #[prost(
7        oneof = "logical_plan_node::LogicalPlanType",
8        tags = "1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33"
9    )]
10    pub logical_plan_type: ::core::option::Option<logical_plan_node::LogicalPlanType>,
11}
12/// Nested message and enum types in `LogicalPlanNode`.
13pub mod logical_plan_node {
14    #[derive(Clone, PartialEq, ::prost::Oneof)]
15    pub enum LogicalPlanType {
16        #[prost(message, tag = "1")]
17        ListingScan(super::ListingTableScanNode),
18        #[prost(message, tag = "3")]
19        Projection(::prost::alloc::boxed::Box<super::ProjectionNode>),
20        #[prost(message, tag = "4")]
21        Selection(::prost::alloc::boxed::Box<super::SelectionNode>),
22        #[prost(message, tag = "5")]
23        Limit(::prost::alloc::boxed::Box<super::LimitNode>),
24        #[prost(message, tag = "6")]
25        Aggregate(::prost::alloc::boxed::Box<super::AggregateNode>),
26        #[prost(message, tag = "7")]
27        Join(::prost::alloc::boxed::Box<super::JoinNode>),
28        #[prost(message, tag = "8")]
29        Sort(::prost::alloc::boxed::Box<super::SortNode>),
30        #[prost(message, tag = "9")]
31        Repartition(::prost::alloc::boxed::Box<super::RepartitionNode>),
32        #[prost(message, tag = "10")]
33        EmptyRelation(super::EmptyRelationNode),
34        #[prost(message, tag = "11")]
35        CreateExternalTable(super::CreateExternalTableNode),
36        #[prost(message, tag = "12")]
37        Explain(::prost::alloc::boxed::Box<super::ExplainNode>),
38        #[prost(message, tag = "13")]
39        Window(::prost::alloc::boxed::Box<super::WindowNode>),
40        #[prost(message, tag = "14")]
41        Analyze(::prost::alloc::boxed::Box<super::AnalyzeNode>),
42        #[prost(message, tag = "15")]
43        CrossJoin(::prost::alloc::boxed::Box<super::CrossJoinNode>),
44        #[prost(message, tag = "16")]
45        Values(super::ValuesNode),
46        #[prost(message, tag = "17")]
47        Extension(super::LogicalExtensionNode),
48        #[prost(message, tag = "18")]
49        CreateCatalogSchema(super::CreateCatalogSchemaNode),
50        #[prost(message, tag = "19")]
51        Union(super::UnionNode),
52        #[prost(message, tag = "20")]
53        CreateCatalog(super::CreateCatalogNode),
54        #[prost(message, tag = "21")]
55        SubqueryAlias(::prost::alloc::boxed::Box<super::SubqueryAliasNode>),
56        #[prost(message, tag = "22")]
57        CreateView(::prost::alloc::boxed::Box<super::CreateViewNode>),
58        #[prost(message, tag = "23")]
59        Distinct(::prost::alloc::boxed::Box<super::DistinctNode>),
60        #[prost(message, tag = "24")]
61        ViewScan(::prost::alloc::boxed::Box<super::ViewTableScanNode>),
62        #[prost(message, tag = "25")]
63        CustomScan(super::CustomTableScanNode),
64        #[prost(message, tag = "26")]
65        Prepare(::prost::alloc::boxed::Box<super::PrepareNode>),
66        #[prost(message, tag = "27")]
67        DropView(super::DropViewNode),
68        #[prost(message, tag = "28")]
69        DistinctOn(::prost::alloc::boxed::Box<super::DistinctOnNode>),
70        #[prost(message, tag = "29")]
71        CopyTo(::prost::alloc::boxed::Box<super::CopyToNode>),
72        #[prost(message, tag = "30")]
73        Unnest(::prost::alloc::boxed::Box<super::UnnestNode>),
74        #[prost(message, tag = "31")]
75        RecursiveQuery(::prost::alloc::boxed::Box<super::RecursiveQueryNode>),
76        #[prost(message, tag = "32")]
77        CteWorkTableScan(super::CteWorkTableScanNode),
78        #[prost(message, tag = "33")]
79        Dml(::prost::alloc::boxed::Box<super::DmlNode>),
80    }
81}
82#[derive(Clone, PartialEq, ::prost::Message)]
83pub struct LogicalExtensionNode {
84    #[prost(bytes = "vec", tag = "1")]
85    pub node: ::prost::alloc::vec::Vec<u8>,
86    #[prost(message, repeated, tag = "2")]
87    pub inputs: ::prost::alloc::vec::Vec<LogicalPlanNode>,
88}
89#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
90pub struct ProjectionColumns {
91    #[prost(string, repeated, tag = "1")]
92    pub columns: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
93}
94#[derive(Clone, PartialEq, ::prost::Message)]
95pub struct LogicalExprNodeCollection {
96    #[prost(message, repeated, tag = "1")]
97    pub logical_expr_nodes: ::prost::alloc::vec::Vec<LogicalExprNode>,
98}
99#[derive(Clone, PartialEq, ::prost::Message)]
100pub struct SortExprNodeCollection {
101    #[prost(message, repeated, tag = "1")]
102    pub sort_expr_nodes: ::prost::alloc::vec::Vec<SortExprNode>,
103}
104#[derive(Clone, PartialEq, ::prost::Message)]
105pub struct ListingTableScanNode {
106    #[prost(message, optional, tag = "14")]
107    pub table_name: ::core::option::Option<TableReference>,
108    #[prost(string, repeated, tag = "2")]
109    pub paths: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
110    #[prost(string, tag = "3")]
111    pub file_extension: ::prost::alloc::string::String,
112    #[prost(message, optional, tag = "4")]
113    pub projection: ::core::option::Option<ProjectionColumns>,
114    #[prost(message, optional, tag = "5")]
115    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
116    #[prost(message, repeated, tag = "6")]
117    pub filters: ::prost::alloc::vec::Vec<LogicalExprNode>,
118    #[prost(message, repeated, tag = "7")]
119    pub table_partition_cols: ::prost::alloc::vec::Vec<PartitionColumn>,
120    #[prost(bool, tag = "8")]
121    pub collect_stat: bool,
122    #[prost(uint32, tag = "9")]
123    pub target_partitions: u32,
124    #[prost(message, repeated, tag = "13")]
125    pub file_sort_order: ::prost::alloc::vec::Vec<SortExprNodeCollection>,
126    #[prost(
127        oneof = "listing_table_scan_node::FileFormatType",
128        tags = "10, 11, 12, 15, 16"
129    )]
130    pub file_format_type: ::core::option::Option<
131        listing_table_scan_node::FileFormatType,
132    >,
133}
134/// Nested message and enum types in `ListingTableScanNode`.
135pub mod listing_table_scan_node {
136    #[derive(Clone, PartialEq, ::prost::Oneof)]
137    pub enum FileFormatType {
138        #[prost(message, tag = "10")]
139        Csv(super::super::datafusion_common::CsvFormat),
140        #[prost(message, tag = "11")]
141        Parquet(super::super::datafusion_common::ParquetFormat),
142        #[prost(message, tag = "12")]
143        Avro(super::super::datafusion_common::AvroFormat),
144        #[prost(message, tag = "15")]
145        Json(super::super::datafusion_common::NdJsonFormat),
146        #[prost(message, tag = "16")]
147        Arrow(super::super::datafusion_common::ArrowFormat),
148    }
149}
150#[derive(Clone, PartialEq, ::prost::Message)]
151pub struct ViewTableScanNode {
152    #[prost(message, optional, tag = "6")]
153    pub table_name: ::core::option::Option<TableReference>,
154    #[prost(message, optional, boxed, tag = "2")]
155    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
156    #[prost(message, optional, tag = "3")]
157    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
158    #[prost(message, optional, tag = "4")]
159    pub projection: ::core::option::Option<ProjectionColumns>,
160    #[prost(string, tag = "5")]
161    pub definition: ::prost::alloc::string::String,
162}
163/// Logical Plan to Scan a CustomTableProvider registered at runtime
164#[derive(Clone, PartialEq, ::prost::Message)]
165pub struct CustomTableScanNode {
166    #[prost(message, optional, tag = "6")]
167    pub table_name: ::core::option::Option<TableReference>,
168    #[prost(message, optional, tag = "2")]
169    pub projection: ::core::option::Option<ProjectionColumns>,
170    #[prost(message, optional, tag = "3")]
171    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
172    #[prost(message, repeated, tag = "4")]
173    pub filters: ::prost::alloc::vec::Vec<LogicalExprNode>,
174    #[prost(bytes = "vec", tag = "5")]
175    pub custom_table_data: ::prost::alloc::vec::Vec<u8>,
176}
177#[derive(Clone, PartialEq, ::prost::Message)]
178pub struct ProjectionNode {
179    #[prost(message, optional, boxed, tag = "1")]
180    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
181    #[prost(message, repeated, tag = "2")]
182    pub expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
183    #[prost(oneof = "projection_node::OptionalAlias", tags = "3")]
184    pub optional_alias: ::core::option::Option<projection_node::OptionalAlias>,
185}
186/// Nested message and enum types in `ProjectionNode`.
187pub mod projection_node {
188    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
189    pub enum OptionalAlias {
190        #[prost(string, tag = "3")]
191        Alias(::prost::alloc::string::String),
192    }
193}
194#[derive(Clone, PartialEq, ::prost::Message)]
195pub struct SelectionNode {
196    #[prost(message, optional, boxed, tag = "1")]
197    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
198    #[prost(message, optional, tag = "2")]
199    pub expr: ::core::option::Option<LogicalExprNode>,
200}
201#[derive(Clone, PartialEq, ::prost::Message)]
202pub struct SortNode {
203    #[prost(message, optional, boxed, tag = "1")]
204    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
205    #[prost(message, repeated, tag = "2")]
206    pub expr: ::prost::alloc::vec::Vec<SortExprNode>,
207    /// Maximum number of highest/lowest rows to fetch; negative means no limit
208    #[prost(int64, tag = "3")]
209    pub fetch: i64,
210}
211#[derive(Clone, PartialEq, ::prost::Message)]
212pub struct RepartitionNode {
213    #[prost(message, optional, boxed, tag = "1")]
214    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
215    #[prost(oneof = "repartition_node::PartitionMethod", tags = "2, 3")]
216    pub partition_method: ::core::option::Option<repartition_node::PartitionMethod>,
217}
218/// Nested message and enum types in `RepartitionNode`.
219pub mod repartition_node {
220    #[derive(Clone, PartialEq, ::prost::Oneof)]
221    pub enum PartitionMethod {
222        #[prost(uint64, tag = "2")]
223        RoundRobin(u64),
224        #[prost(message, tag = "3")]
225        Hash(super::HashRepartition),
226    }
227}
228#[derive(Clone, PartialEq, ::prost::Message)]
229pub struct HashRepartition {
230    #[prost(message, repeated, tag = "1")]
231    pub hash_expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
232    #[prost(uint64, tag = "2")]
233    pub partition_count: u64,
234}
235#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
236pub struct EmptyRelationNode {
237    #[prost(bool, tag = "1")]
238    pub produce_one_row: bool,
239}
240#[derive(Clone, PartialEq, ::prost::Message)]
241pub struct CreateExternalTableNode {
242    #[prost(message, optional, tag = "9")]
243    pub name: ::core::option::Option<TableReference>,
244    #[prost(string, tag = "2")]
245    pub location: ::prost::alloc::string::String,
246    #[prost(string, tag = "3")]
247    pub file_type: ::prost::alloc::string::String,
248    #[prost(message, optional, tag = "4")]
249    pub schema: ::core::option::Option<super::datafusion_common::DfSchema>,
250    #[prost(string, repeated, tag = "5")]
251    pub table_partition_cols: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
252    #[prost(bool, tag = "6")]
253    pub if_not_exists: bool,
254    #[prost(bool, tag = "15")]
255    pub or_replace: bool,
256    #[prost(bool, tag = "14")]
257    pub temporary: bool,
258    #[prost(string, tag = "7")]
259    pub definition: ::prost::alloc::string::String,
260    #[prost(message, repeated, tag = "10")]
261    pub order_exprs: ::prost::alloc::vec::Vec<SortExprNodeCollection>,
262    #[prost(bool, tag = "11")]
263    pub unbounded: bool,
264    #[prost(map = "string, string", tag = "8")]
265    pub options: ::std::collections::HashMap<
266        ::prost::alloc::string::String,
267        ::prost::alloc::string::String,
268    >,
269    #[prost(message, optional, tag = "12")]
270    pub constraints: ::core::option::Option<super::datafusion_common::Constraints>,
271    #[prost(map = "string, message", tag = "13")]
272    pub column_defaults: ::std::collections::HashMap<
273        ::prost::alloc::string::String,
274        LogicalExprNode,
275    >,
276}
277#[derive(Clone, PartialEq, ::prost::Message)]
278pub struct PrepareNode {
279    #[prost(string, tag = "1")]
280    pub name: ::prost::alloc::string::String,
281    /// We serialize both the data types and the fields for compatibility with
282    /// older versions (newer versions populate both).
283    #[prost(message, repeated, tag = "2")]
284    pub data_types: ::prost::alloc::vec::Vec<super::datafusion_common::ArrowType>,
285    #[prost(message, optional, boxed, tag = "3")]
286    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
287    #[prost(message, repeated, tag = "4")]
288    pub fields: ::prost::alloc::vec::Vec<super::datafusion_common::Field>,
289}
290#[derive(Clone, PartialEq, ::prost::Message)]
291pub struct CreateCatalogSchemaNode {
292    #[prost(string, tag = "1")]
293    pub schema_name: ::prost::alloc::string::String,
294    #[prost(bool, tag = "2")]
295    pub if_not_exists: bool,
296    #[prost(message, optional, tag = "3")]
297    pub schema: ::core::option::Option<super::datafusion_common::DfSchema>,
298}
299#[derive(Clone, PartialEq, ::prost::Message)]
300pub struct CreateCatalogNode {
301    #[prost(string, tag = "1")]
302    pub catalog_name: ::prost::alloc::string::String,
303    #[prost(bool, tag = "2")]
304    pub if_not_exists: bool,
305    #[prost(message, optional, tag = "3")]
306    pub schema: ::core::option::Option<super::datafusion_common::DfSchema>,
307}
308#[derive(Clone, PartialEq, ::prost::Message)]
309pub struct DropViewNode {
310    #[prost(message, optional, tag = "1")]
311    pub name: ::core::option::Option<TableReference>,
312    #[prost(bool, tag = "2")]
313    pub if_exists: bool,
314    #[prost(message, optional, tag = "3")]
315    pub schema: ::core::option::Option<super::datafusion_common::DfSchema>,
316}
317#[derive(Clone, PartialEq, ::prost::Message)]
318pub struct CreateViewNode {
319    #[prost(message, optional, tag = "5")]
320    pub name: ::core::option::Option<TableReference>,
321    #[prost(message, optional, boxed, tag = "2")]
322    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
323    #[prost(bool, tag = "3")]
324    pub or_replace: bool,
325    #[prost(bool, tag = "6")]
326    pub temporary: bool,
327    #[prost(string, tag = "4")]
328    pub definition: ::prost::alloc::string::String,
329}
330/// a node containing data for defining values list. unlike in SQL where it's two dimensional, here
331/// the list is flattened, and with the field n_cols it can be parsed and partitioned into rows
332#[derive(Clone, PartialEq, ::prost::Message)]
333pub struct ValuesNode {
334    #[prost(uint64, tag = "1")]
335    pub n_cols: u64,
336    #[prost(message, repeated, tag = "2")]
337    pub values_list: ::prost::alloc::vec::Vec<LogicalExprNode>,
338}
339#[derive(Clone, PartialEq, ::prost::Message)]
340pub struct AnalyzeNode {
341    #[prost(message, optional, boxed, tag = "1")]
342    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
343    #[prost(bool, tag = "2")]
344    pub verbose: bool,
345}
346#[derive(Clone, PartialEq, ::prost::Message)]
347pub struct ExplainNode {
348    #[prost(message, optional, boxed, tag = "1")]
349    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
350    #[prost(bool, tag = "2")]
351    pub verbose: bool,
352}
353#[derive(Clone, PartialEq, ::prost::Message)]
354pub struct AggregateNode {
355    #[prost(message, optional, boxed, tag = "1")]
356    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
357    #[prost(message, repeated, tag = "2")]
358    pub group_expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
359    #[prost(message, repeated, tag = "3")]
360    pub aggr_expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
361}
362#[derive(Clone, PartialEq, ::prost::Message)]
363pub struct WindowNode {
364    #[prost(message, optional, boxed, tag = "1")]
365    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
366    #[prost(message, repeated, tag = "2")]
367    pub window_expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
368}
369#[derive(Clone, PartialEq, ::prost::Message)]
370pub struct JoinNode {
371    #[prost(message, optional, boxed, tag = "1")]
372    pub left: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
373    #[prost(message, optional, boxed, tag = "2")]
374    pub right: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
375    #[prost(enumeration = "super::datafusion_common::JoinType", tag = "3")]
376    pub join_type: i32,
377    #[prost(enumeration = "super::datafusion_common::JoinConstraint", tag = "4")]
378    pub join_constraint: i32,
379    #[prost(message, repeated, tag = "5")]
380    pub left_join_key: ::prost::alloc::vec::Vec<LogicalExprNode>,
381    #[prost(message, repeated, tag = "6")]
382    pub right_join_key: ::prost::alloc::vec::Vec<LogicalExprNode>,
383    #[prost(enumeration = "super::datafusion_common::NullEquality", tag = "7")]
384    pub null_equality: i32,
385    #[prost(message, optional, tag = "8")]
386    pub filter: ::core::option::Option<LogicalExprNode>,
387}
388#[derive(Clone, PartialEq, ::prost::Message)]
389pub struct DistinctNode {
390    #[prost(message, optional, boxed, tag = "1")]
391    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
392}
393#[derive(Clone, PartialEq, ::prost::Message)]
394pub struct DistinctOnNode {
395    #[prost(message, repeated, tag = "1")]
396    pub on_expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
397    #[prost(message, repeated, tag = "2")]
398    pub select_expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
399    #[prost(message, repeated, tag = "3")]
400    pub sort_expr: ::prost::alloc::vec::Vec<SortExprNode>,
401    #[prost(message, optional, boxed, tag = "4")]
402    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
403}
404#[derive(Clone, PartialEq, ::prost::Message)]
405pub struct CopyToNode {
406    #[prost(message, optional, boxed, tag = "1")]
407    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
408    #[prost(string, tag = "2")]
409    pub output_url: ::prost::alloc::string::String,
410    #[prost(bytes = "vec", tag = "3")]
411    pub file_type: ::prost::alloc::vec::Vec<u8>,
412    #[prost(string, repeated, tag = "7")]
413    pub partition_by: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
414}
415#[derive(Clone, PartialEq, ::prost::Message)]
416pub struct DmlNode {
417    #[prost(enumeration = "dml_node::Type", tag = "1")]
418    pub dml_type: i32,
419    #[prost(message, optional, boxed, tag = "2")]
420    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
421    #[prost(message, optional, tag = "3")]
422    pub table_name: ::core::option::Option<TableReference>,
423    #[prost(message, optional, boxed, tag = "5")]
424    pub target: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
425}
426/// Nested message and enum types in `DmlNode`.
427pub mod dml_node {
428    #[derive(
429        Clone,
430        Copy,
431        Debug,
432        PartialEq,
433        Eq,
434        Hash,
435        PartialOrd,
436        Ord,
437        ::prost::Enumeration
438    )]
439    #[repr(i32)]
440    pub enum Type {
441        Update = 0,
442        Delete = 1,
443        Ctas = 2,
444        InsertAppend = 3,
445        InsertOverwrite = 4,
446        InsertReplace = 5,
447    }
448    impl Type {
449        /// String value of the enum field names used in the ProtoBuf definition.
450        ///
451        /// The values are not transformed in any way and thus are considered stable
452        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
453        pub fn as_str_name(&self) -> &'static str {
454            match self {
455                Self::Update => "UPDATE",
456                Self::Delete => "DELETE",
457                Self::Ctas => "CTAS",
458                Self::InsertAppend => "INSERT_APPEND",
459                Self::InsertOverwrite => "INSERT_OVERWRITE",
460                Self::InsertReplace => "INSERT_REPLACE",
461            }
462        }
463        /// Creates an enum from field names used in the ProtoBuf definition.
464        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
465            match value {
466                "UPDATE" => Some(Self::Update),
467                "DELETE" => Some(Self::Delete),
468                "CTAS" => Some(Self::Ctas),
469                "INSERT_APPEND" => Some(Self::InsertAppend),
470                "INSERT_OVERWRITE" => Some(Self::InsertOverwrite),
471                "INSERT_REPLACE" => Some(Self::InsertReplace),
472                _ => None,
473            }
474        }
475    }
476}
477#[derive(Clone, PartialEq, ::prost::Message)]
478pub struct UnnestNode {
479    #[prost(message, optional, boxed, tag = "1")]
480    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
481    #[prost(message, repeated, tag = "2")]
482    pub exec_columns: ::prost::alloc::vec::Vec<super::datafusion_common::Column>,
483    #[prost(message, repeated, tag = "3")]
484    pub list_type_columns: ::prost::alloc::vec::Vec<ColumnUnnestListItem>,
485    #[prost(uint64, repeated, tag = "4")]
486    pub struct_type_columns: ::prost::alloc::vec::Vec<u64>,
487    #[prost(uint64, repeated, tag = "5")]
488    pub dependency_indices: ::prost::alloc::vec::Vec<u64>,
489    #[prost(message, optional, tag = "6")]
490    pub schema: ::core::option::Option<super::datafusion_common::DfSchema>,
491    #[prost(message, optional, tag = "7")]
492    pub options: ::core::option::Option<UnnestOptions>,
493}
494#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
495pub struct ColumnUnnestListItem {
496    #[prost(uint32, tag = "1")]
497    pub input_index: u32,
498    #[prost(message, optional, tag = "2")]
499    pub recursion: ::core::option::Option<ColumnUnnestListRecursion>,
500}
501#[derive(Clone, PartialEq, ::prost::Message)]
502pub struct ColumnUnnestListRecursions {
503    #[prost(message, repeated, tag = "2")]
504    pub recursions: ::prost::alloc::vec::Vec<ColumnUnnestListRecursion>,
505}
506#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
507pub struct ColumnUnnestListRecursion {
508    #[prost(message, optional, tag = "1")]
509    pub output_column: ::core::option::Option<super::datafusion_common::Column>,
510    #[prost(uint32, tag = "2")]
511    pub depth: u32,
512}
513#[derive(Clone, PartialEq, ::prost::Message)]
514pub struct UnnestOptions {
515    #[prost(bool, tag = "1")]
516    pub preserve_nulls: bool,
517    #[prost(message, repeated, tag = "2")]
518    pub recursions: ::prost::alloc::vec::Vec<RecursionUnnestOption>,
519}
520#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
521pub struct RecursionUnnestOption {
522    #[prost(message, optional, tag = "1")]
523    pub output_column: ::core::option::Option<super::datafusion_common::Column>,
524    #[prost(message, optional, tag = "2")]
525    pub input_column: ::core::option::Option<super::datafusion_common::Column>,
526    #[prost(uint32, tag = "3")]
527    pub depth: u32,
528}
529#[derive(Clone, PartialEq, ::prost::Message)]
530pub struct UnionNode {
531    #[prost(message, repeated, tag = "1")]
532    pub inputs: ::prost::alloc::vec::Vec<LogicalPlanNode>,
533}
534#[derive(Clone, PartialEq, ::prost::Message)]
535pub struct CrossJoinNode {
536    #[prost(message, optional, boxed, tag = "1")]
537    pub left: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
538    #[prost(message, optional, boxed, tag = "2")]
539    pub right: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
540}
541#[derive(Clone, PartialEq, ::prost::Message)]
542pub struct LimitNode {
543    #[prost(message, optional, boxed, tag = "1")]
544    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
545    /// The number of rows to skip before fetch; non-positive means don't skip any
546    #[prost(int64, tag = "2")]
547    pub skip: i64,
548    /// Maximum number of rows to fetch; negative means no limit
549    #[prost(int64, tag = "3")]
550    pub fetch: i64,
551}
552#[derive(Clone, PartialEq, ::prost::Message)]
553pub struct SelectionExecNode {
554    #[prost(message, optional, tag = "1")]
555    pub expr: ::core::option::Option<LogicalExprNode>,
556}
557#[derive(Clone, PartialEq, ::prost::Message)]
558pub struct SubqueryAliasNode {
559    #[prost(message, optional, boxed, tag = "1")]
560    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
561    #[prost(message, optional, tag = "3")]
562    pub alias: ::core::option::Option<TableReference>,
563}
564/// logical expressions
565#[derive(Clone, PartialEq, ::prost::Message)]
566pub struct LogicalExprNode {
567    #[prost(
568        oneof = "logical_expr_node::ExprType",
569        tags = "1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35"
570    )]
571    pub expr_type: ::core::option::Option<logical_expr_node::ExprType>,
572}
573/// Nested message and enum types in `LogicalExprNode`.
574pub mod logical_expr_node {
575    #[derive(Clone, PartialEq, ::prost::Oneof)]
576    pub enum ExprType {
577        /// column references
578        #[prost(message, tag = "1")]
579        Column(super::super::datafusion_common::Column),
580        /// alias
581        #[prost(message, tag = "2")]
582        Alias(::prost::alloc::boxed::Box<super::AliasNode>),
583        #[prost(message, tag = "3")]
584        Literal(super::super::datafusion_common::ScalarValue),
585        /// binary expressions
586        #[prost(message, tag = "4")]
587        BinaryExpr(super::BinaryExprNode),
588        /// null checks
589        #[prost(message, tag = "6")]
590        IsNullExpr(::prost::alloc::boxed::Box<super::IsNull>),
591        #[prost(message, tag = "7")]
592        IsNotNullExpr(::prost::alloc::boxed::Box<super::IsNotNull>),
593        #[prost(message, tag = "8")]
594        NotExpr(::prost::alloc::boxed::Box<super::Not>),
595        #[prost(message, tag = "9")]
596        Between(::prost::alloc::boxed::Box<super::BetweenNode>),
597        #[prost(message, tag = "10")]
598        Case(::prost::alloc::boxed::Box<super::CaseNode>),
599        #[prost(message, tag = "11")]
600        Cast(::prost::alloc::boxed::Box<super::CastNode>),
601        #[prost(message, tag = "13")]
602        Negative(::prost::alloc::boxed::Box<super::NegativeNode>),
603        #[prost(message, tag = "14")]
604        InList(::prost::alloc::boxed::Box<super::InListNode>),
605        #[prost(message, tag = "15")]
606        Wildcard(super::Wildcard),
607        /// was  ScalarFunctionNode scalar_function = 16;
608        #[prost(message, tag = "17")]
609        TryCast(::prost::alloc::boxed::Box<super::TryCastNode>),
610        /// window expressions
611        #[prost(message, tag = "18")]
612        WindowExpr(::prost::alloc::boxed::Box<super::WindowExprNode>),
613        /// AggregateUDF expressions
614        #[prost(message, tag = "19")]
615        AggregateUdfExpr(::prost::alloc::boxed::Box<super::AggregateUdfExprNode>),
616        /// Scalar UDF expressions
617        #[prost(message, tag = "20")]
618        ScalarUdfExpr(super::ScalarUdfExprNode),
619        #[prost(message, tag = "22")]
620        GroupingSet(super::GroupingSetNode),
621        #[prost(message, tag = "23")]
622        Cube(super::CubeNode),
623        #[prost(message, tag = "24")]
624        Rollup(super::RollupNode),
625        #[prost(message, tag = "25")]
626        IsTrue(::prost::alloc::boxed::Box<super::IsTrue>),
627        #[prost(message, tag = "26")]
628        IsFalse(::prost::alloc::boxed::Box<super::IsFalse>),
629        #[prost(message, tag = "27")]
630        IsUnknown(::prost::alloc::boxed::Box<super::IsUnknown>),
631        #[prost(message, tag = "28")]
632        IsNotTrue(::prost::alloc::boxed::Box<super::IsNotTrue>),
633        #[prost(message, tag = "29")]
634        IsNotFalse(::prost::alloc::boxed::Box<super::IsNotFalse>),
635        #[prost(message, tag = "30")]
636        IsNotUnknown(::prost::alloc::boxed::Box<super::IsNotUnknown>),
637        #[prost(message, tag = "31")]
638        Like(::prost::alloc::boxed::Box<super::LikeNode>),
639        #[prost(message, tag = "32")]
640        Ilike(::prost::alloc::boxed::Box<super::ILikeNode>),
641        #[prost(message, tag = "33")]
642        SimilarTo(::prost::alloc::boxed::Box<super::SimilarToNode>),
643        #[prost(message, tag = "34")]
644        Placeholder(super::PlaceholderNode),
645        #[prost(message, tag = "35")]
646        Unnest(super::Unnest),
647    }
648}
649#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
650pub struct Wildcard {
651    #[prost(message, optional, tag = "1")]
652    pub qualifier: ::core::option::Option<TableReference>,
653}
654#[derive(Clone, PartialEq, ::prost::Message)]
655pub struct PlaceholderNode {
656    #[prost(string, tag = "1")]
657    pub id: ::prost::alloc::string::String,
658    /// We serialize the data type, metadata, and nullability separately to maintain
659    /// compatibility with older versions
660    #[prost(message, optional, tag = "2")]
661    pub data_type: ::core::option::Option<super::datafusion_common::ArrowType>,
662    #[prost(bool, optional, tag = "3")]
663    pub nullable: ::core::option::Option<bool>,
664    #[prost(map = "string, string", tag = "4")]
665    pub metadata: ::std::collections::HashMap<
666        ::prost::alloc::string::String,
667        ::prost::alloc::string::String,
668    >,
669}
670#[derive(Clone, PartialEq, ::prost::Message)]
671pub struct LogicalExprList {
672    #[prost(message, repeated, tag = "1")]
673    pub expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
674}
675#[derive(Clone, PartialEq, ::prost::Message)]
676pub struct GroupingSetNode {
677    #[prost(message, repeated, tag = "1")]
678    pub expr: ::prost::alloc::vec::Vec<LogicalExprList>,
679}
680#[derive(Clone, PartialEq, ::prost::Message)]
681pub struct CubeNode {
682    #[prost(message, repeated, tag = "1")]
683    pub expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
684}
685#[derive(Clone, PartialEq, ::prost::Message)]
686pub struct RollupNode {
687    #[prost(message, repeated, tag = "1")]
688    pub expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
689}
690#[derive(Clone, PartialEq, ::prost::Message)]
691pub struct NamedStructField {
692    #[prost(message, optional, tag = "1")]
693    pub name: ::core::option::Option<super::datafusion_common::ScalarValue>,
694}
695#[derive(Clone, PartialEq, ::prost::Message)]
696pub struct ListIndex {
697    #[prost(message, optional, tag = "1")]
698    pub key: ::core::option::Option<LogicalExprNode>,
699}
700#[derive(Clone, PartialEq, ::prost::Message)]
701pub struct ListRange {
702    #[prost(message, optional, tag = "1")]
703    pub start: ::core::option::Option<LogicalExprNode>,
704    #[prost(message, optional, tag = "2")]
705    pub stop: ::core::option::Option<LogicalExprNode>,
706    #[prost(message, optional, tag = "3")]
707    pub stride: ::core::option::Option<LogicalExprNode>,
708}
709#[derive(Clone, PartialEq, ::prost::Message)]
710pub struct IsNull {
711    #[prost(message, optional, boxed, tag = "1")]
712    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
713}
714#[derive(Clone, PartialEq, ::prost::Message)]
715pub struct IsNotNull {
716    #[prost(message, optional, boxed, tag = "1")]
717    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
718}
719#[derive(Clone, PartialEq, ::prost::Message)]
720pub struct IsTrue {
721    #[prost(message, optional, boxed, tag = "1")]
722    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
723}
724#[derive(Clone, PartialEq, ::prost::Message)]
725pub struct IsFalse {
726    #[prost(message, optional, boxed, tag = "1")]
727    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
728}
729#[derive(Clone, PartialEq, ::prost::Message)]
730pub struct IsUnknown {
731    #[prost(message, optional, boxed, tag = "1")]
732    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
733}
734#[derive(Clone, PartialEq, ::prost::Message)]
735pub struct IsNotTrue {
736    #[prost(message, optional, boxed, tag = "1")]
737    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
738}
739#[derive(Clone, PartialEq, ::prost::Message)]
740pub struct IsNotFalse {
741    #[prost(message, optional, boxed, tag = "1")]
742    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
743}
744#[derive(Clone, PartialEq, ::prost::Message)]
745pub struct IsNotUnknown {
746    #[prost(message, optional, boxed, tag = "1")]
747    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
748}
749#[derive(Clone, PartialEq, ::prost::Message)]
750pub struct Not {
751    #[prost(message, optional, boxed, tag = "1")]
752    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
753}
754#[derive(Clone, PartialEq, ::prost::Message)]
755pub struct AliasNode {
756    #[prost(message, optional, boxed, tag = "1")]
757    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
758    #[prost(string, tag = "2")]
759    pub alias: ::prost::alloc::string::String,
760    #[prost(message, repeated, tag = "3")]
761    pub relation: ::prost::alloc::vec::Vec<TableReference>,
762    #[prost(map = "string, string", tag = "4")]
763    pub metadata: ::std::collections::HashMap<
764        ::prost::alloc::string::String,
765        ::prost::alloc::string::String,
766    >,
767}
768#[derive(Clone, PartialEq, ::prost::Message)]
769pub struct BinaryExprNode {
770    /// Represents the operands from the left inner most expression
771    /// to the right outer most expression where each of them are chained
772    /// with the operator 'op'.
773    #[prost(message, repeated, tag = "1")]
774    pub operands: ::prost::alloc::vec::Vec<LogicalExprNode>,
775    #[prost(string, tag = "3")]
776    pub op: ::prost::alloc::string::String,
777}
778#[derive(Clone, PartialEq, ::prost::Message)]
779pub struct NegativeNode {
780    #[prost(message, optional, boxed, tag = "1")]
781    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
782}
783#[derive(Clone, PartialEq, ::prost::Message)]
784pub struct Unnest {
785    #[prost(message, repeated, tag = "1")]
786    pub exprs: ::prost::alloc::vec::Vec<LogicalExprNode>,
787}
788#[derive(Clone, PartialEq, ::prost::Message)]
789pub struct InListNode {
790    #[prost(message, optional, boxed, tag = "1")]
791    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
792    #[prost(message, repeated, tag = "2")]
793    pub list: ::prost::alloc::vec::Vec<LogicalExprNode>,
794    #[prost(bool, tag = "3")]
795    pub negated: bool,
796}
797#[derive(Clone, PartialEq, ::prost::Message)]
798pub struct AggregateUdfExprNode {
799    #[prost(string, tag = "1")]
800    pub fun_name: ::prost::alloc::string::String,
801    #[prost(message, repeated, tag = "2")]
802    pub args: ::prost::alloc::vec::Vec<LogicalExprNode>,
803    #[prost(bool, tag = "5")]
804    pub distinct: bool,
805    #[prost(message, optional, boxed, tag = "3")]
806    pub filter: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
807    #[prost(message, repeated, tag = "4")]
808    pub order_by: ::prost::alloc::vec::Vec<SortExprNode>,
809    #[prost(bytes = "vec", optional, tag = "6")]
810    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
811    #[prost(enumeration = "NullTreatment", optional, tag = "7")]
812    pub null_treatment: ::core::option::Option<i32>,
813}
814#[derive(Clone, PartialEq, ::prost::Message)]
815pub struct ScalarUdfExprNode {
816    #[prost(string, tag = "1")]
817    pub fun_name: ::prost::alloc::string::String,
818    #[prost(message, repeated, tag = "2")]
819    pub args: ::prost::alloc::vec::Vec<LogicalExprNode>,
820    #[prost(bytes = "vec", optional, tag = "3")]
821    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
822}
823#[derive(Clone, PartialEq, ::prost::Message)]
824pub struct WindowExprNode {
825    #[prost(message, repeated, tag = "4")]
826    pub exprs: ::prost::alloc::vec::Vec<LogicalExprNode>,
827    #[prost(message, repeated, tag = "5")]
828    pub partition_by: ::prost::alloc::vec::Vec<LogicalExprNode>,
829    #[prost(message, repeated, tag = "6")]
830    pub order_by: ::prost::alloc::vec::Vec<SortExprNode>,
831    /// repeated LogicalExprNode filter = 7;
832    #[prost(message, optional, tag = "8")]
833    pub window_frame: ::core::option::Option<WindowFrame>,
834    #[prost(bytes = "vec", optional, tag = "10")]
835    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
836    #[prost(enumeration = "NullTreatment", optional, tag = "11")]
837    pub null_treatment: ::core::option::Option<i32>,
838    #[prost(bool, tag = "12")]
839    pub distinct: bool,
840    #[prost(message, optional, boxed, tag = "13")]
841    pub filter: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
842    #[prost(oneof = "window_expr_node::WindowFunction", tags = "3, 9")]
843    pub window_function: ::core::option::Option<window_expr_node::WindowFunction>,
844}
845/// Nested message and enum types in `WindowExprNode`.
846pub mod window_expr_node {
847    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
848    pub enum WindowFunction {
849        /// BuiltInWindowFunction built_in_function = 2;
850        #[prost(string, tag = "3")]
851        Udaf(::prost::alloc::string::String),
852        #[prost(string, tag = "9")]
853        Udwf(::prost::alloc::string::String),
854    }
855}
856#[derive(Clone, PartialEq, ::prost::Message)]
857pub struct BetweenNode {
858    #[prost(message, optional, boxed, tag = "1")]
859    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
860    #[prost(bool, tag = "2")]
861    pub negated: bool,
862    #[prost(message, optional, boxed, tag = "3")]
863    pub low: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
864    #[prost(message, optional, boxed, tag = "4")]
865    pub high: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
866}
867#[derive(Clone, PartialEq, ::prost::Message)]
868pub struct LikeNode {
869    #[prost(bool, tag = "1")]
870    pub negated: bool,
871    #[prost(message, optional, boxed, tag = "2")]
872    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
873    #[prost(message, optional, boxed, tag = "3")]
874    pub pattern: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
875    #[prost(string, tag = "4")]
876    pub escape_char: ::prost::alloc::string::String,
877}
878#[derive(Clone, PartialEq, ::prost::Message)]
879pub struct ILikeNode {
880    #[prost(bool, tag = "1")]
881    pub negated: bool,
882    #[prost(message, optional, boxed, tag = "2")]
883    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
884    #[prost(message, optional, boxed, tag = "3")]
885    pub pattern: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
886    #[prost(string, tag = "4")]
887    pub escape_char: ::prost::alloc::string::String,
888}
889#[derive(Clone, PartialEq, ::prost::Message)]
890pub struct SimilarToNode {
891    #[prost(bool, tag = "1")]
892    pub negated: bool,
893    #[prost(message, optional, boxed, tag = "2")]
894    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
895    #[prost(message, optional, boxed, tag = "3")]
896    pub pattern: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
897    #[prost(string, tag = "4")]
898    pub escape_char: ::prost::alloc::string::String,
899}
900#[derive(Clone, PartialEq, ::prost::Message)]
901pub struct CaseNode {
902    #[prost(message, optional, boxed, tag = "1")]
903    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
904    #[prost(message, repeated, tag = "2")]
905    pub when_then_expr: ::prost::alloc::vec::Vec<WhenThen>,
906    #[prost(message, optional, boxed, tag = "3")]
907    pub else_expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
908}
909#[derive(Clone, PartialEq, ::prost::Message)]
910pub struct WhenThen {
911    #[prost(message, optional, tag = "1")]
912    pub when_expr: ::core::option::Option<LogicalExprNode>,
913    #[prost(message, optional, tag = "2")]
914    pub then_expr: ::core::option::Option<LogicalExprNode>,
915}
916#[derive(Clone, PartialEq, ::prost::Message)]
917pub struct CastNode {
918    #[prost(message, optional, boxed, tag = "1")]
919    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
920    #[prost(message, optional, tag = "2")]
921    pub arrow_type: ::core::option::Option<super::datafusion_common::ArrowType>,
922}
923#[derive(Clone, PartialEq, ::prost::Message)]
924pub struct TryCastNode {
925    #[prost(message, optional, boxed, tag = "1")]
926    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
927    #[prost(message, optional, tag = "2")]
928    pub arrow_type: ::core::option::Option<super::datafusion_common::ArrowType>,
929}
930#[derive(Clone, PartialEq, ::prost::Message)]
931pub struct SortExprNode {
932    #[prost(message, optional, tag = "1")]
933    pub expr: ::core::option::Option<LogicalExprNode>,
934    #[prost(bool, tag = "2")]
935    pub asc: bool,
936    #[prost(bool, tag = "3")]
937    pub nulls_first: bool,
938}
939#[derive(Clone, PartialEq, ::prost::Message)]
940pub struct WindowFrame {
941    #[prost(enumeration = "WindowFrameUnits", tag = "1")]
942    pub window_frame_units: i32,
943    #[prost(message, optional, tag = "2")]
944    pub start_bound: ::core::option::Option<WindowFrameBound>,
945    /// "optional" keyword is stable in protoc 3.15 but prost is still on 3.14 (see <https://github.com/tokio-rs/prost/issues/430> and <https://github.com/tokio-rs/prost/pull/455>)
946    /// this syntax is ugly but is binary compatible with the "optional" keyword (see <https://stackoverflow.com/questions/42622015/how-to-define-an-optional-field-in-protobuf-3>)
947    #[prost(oneof = "window_frame::EndBound", tags = "3")]
948    pub end_bound: ::core::option::Option<window_frame::EndBound>,
949}
950/// Nested message and enum types in `WindowFrame`.
951pub mod window_frame {
952    /// "optional" keyword is stable in protoc 3.15 but prost is still on 3.14 (see <https://github.com/tokio-rs/prost/issues/430> and <https://github.com/tokio-rs/prost/pull/455>)
953    /// this syntax is ugly but is binary compatible with the "optional" keyword (see <https://stackoverflow.com/questions/42622015/how-to-define-an-optional-field-in-protobuf-3>)
954    #[derive(Clone, PartialEq, ::prost::Oneof)]
955    pub enum EndBound {
956        #[prost(message, tag = "3")]
957        Bound(super::WindowFrameBound),
958    }
959}
960#[derive(Clone, PartialEq, ::prost::Message)]
961pub struct WindowFrameBound {
962    #[prost(enumeration = "WindowFrameBoundType", tag = "1")]
963    pub window_frame_bound_type: i32,
964    #[prost(message, optional, tag = "2")]
965    pub bound_value: ::core::option::Option<super::datafusion_common::ScalarValue>,
966}
967#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
968pub struct FixedSizeBinary {
969    #[prost(int32, tag = "1")]
970    pub length: i32,
971}
972#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
973pub struct AnalyzedLogicalPlanType {
974    #[prost(string, tag = "1")]
975    pub analyzer_name: ::prost::alloc::string::String,
976}
977#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
978pub struct OptimizedLogicalPlanType {
979    #[prost(string, tag = "1")]
980    pub optimizer_name: ::prost::alloc::string::String,
981}
982#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
983pub struct OptimizedPhysicalPlanType {
984    #[prost(string, tag = "1")]
985    pub optimizer_name: ::prost::alloc::string::String,
986}
987#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
988pub struct PlanType {
989    #[prost(
990        oneof = "plan_type::PlanTypeEnum",
991        tags = "1, 7, 8, 2, 3, 4, 9, 11, 5, 6, 10, 12, 13"
992    )]
993    pub plan_type_enum: ::core::option::Option<plan_type::PlanTypeEnum>,
994}
995/// Nested message and enum types in `PlanType`.
996pub mod plan_type {
997    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
998    pub enum PlanTypeEnum {
999        #[prost(message, tag = "1")]
1000        InitialLogicalPlan(super::super::datafusion_common::EmptyMessage),
1001        #[prost(message, tag = "7")]
1002        AnalyzedLogicalPlan(super::AnalyzedLogicalPlanType),
1003        #[prost(message, tag = "8")]
1004        FinalAnalyzedLogicalPlan(super::super::datafusion_common::EmptyMessage),
1005        #[prost(message, tag = "2")]
1006        OptimizedLogicalPlan(super::OptimizedLogicalPlanType),
1007        #[prost(message, tag = "3")]
1008        FinalLogicalPlan(super::super::datafusion_common::EmptyMessage),
1009        #[prost(message, tag = "4")]
1010        InitialPhysicalPlan(super::super::datafusion_common::EmptyMessage),
1011        #[prost(message, tag = "9")]
1012        InitialPhysicalPlanWithStats(super::super::datafusion_common::EmptyMessage),
1013        #[prost(message, tag = "11")]
1014        InitialPhysicalPlanWithSchema(super::super::datafusion_common::EmptyMessage),
1015        #[prost(message, tag = "5")]
1016        OptimizedPhysicalPlan(super::OptimizedPhysicalPlanType),
1017        #[prost(message, tag = "6")]
1018        FinalPhysicalPlan(super::super::datafusion_common::EmptyMessage),
1019        #[prost(message, tag = "10")]
1020        FinalPhysicalPlanWithStats(super::super::datafusion_common::EmptyMessage),
1021        #[prost(message, tag = "12")]
1022        FinalPhysicalPlanWithSchema(super::super::datafusion_common::EmptyMessage),
1023        #[prost(message, tag = "13")]
1024        PhysicalPlanError(super::super::datafusion_common::EmptyMessage),
1025    }
1026}
1027#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1028pub struct StringifiedPlan {
1029    #[prost(message, optional, tag = "1")]
1030    pub plan_type: ::core::option::Option<PlanType>,
1031    #[prost(string, tag = "2")]
1032    pub plan: ::prost::alloc::string::String,
1033}
1034#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1035pub struct BareTableReference {
1036    #[prost(string, tag = "1")]
1037    pub table: ::prost::alloc::string::String,
1038}
1039#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1040pub struct PartialTableReference {
1041    #[prost(string, tag = "1")]
1042    pub schema: ::prost::alloc::string::String,
1043    #[prost(string, tag = "2")]
1044    pub table: ::prost::alloc::string::String,
1045}
1046#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1047pub struct FullTableReference {
1048    #[prost(string, tag = "1")]
1049    pub catalog: ::prost::alloc::string::String,
1050    #[prost(string, tag = "2")]
1051    pub schema: ::prost::alloc::string::String,
1052    #[prost(string, tag = "3")]
1053    pub table: ::prost::alloc::string::String,
1054}
1055#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1056pub struct TableReference {
1057    #[prost(oneof = "table_reference::TableReferenceEnum", tags = "1, 2, 3")]
1058    pub table_reference_enum: ::core::option::Option<
1059        table_reference::TableReferenceEnum,
1060    >,
1061}
1062/// Nested message and enum types in `TableReference`.
1063pub mod table_reference {
1064    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1065    pub enum TableReferenceEnum {
1066        #[prost(message, tag = "1")]
1067        Bare(super::BareTableReference),
1068        #[prost(message, tag = "2")]
1069        Partial(super::PartialTableReference),
1070        #[prost(message, tag = "3")]
1071        Full(super::FullTableReference),
1072    }
1073}
1074/// PhysicalPlanNode is a nested type
1075#[derive(Clone, PartialEq, ::prost::Message)]
1076pub struct PhysicalPlanNode {
1077    #[prost(
1078        oneof = "physical_plan_node::PhysicalPlanType",
1079        tags = "1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36"
1080    )]
1081    pub physical_plan_type: ::core::option::Option<physical_plan_node::PhysicalPlanType>,
1082}
1083/// Nested message and enum types in `PhysicalPlanNode`.
1084pub mod physical_plan_node {
1085    #[derive(Clone, PartialEq, ::prost::Oneof)]
1086    pub enum PhysicalPlanType {
1087        #[prost(message, tag = "1")]
1088        ParquetScan(super::ParquetScanExecNode),
1089        #[prost(message, tag = "2")]
1090        CsvScan(super::CsvScanExecNode),
1091        #[prost(message, tag = "3")]
1092        Empty(super::EmptyExecNode),
1093        #[prost(message, tag = "4")]
1094        Projection(::prost::alloc::boxed::Box<super::ProjectionExecNode>),
1095        #[prost(message, tag = "6")]
1096        GlobalLimit(::prost::alloc::boxed::Box<super::GlobalLimitExecNode>),
1097        #[prost(message, tag = "7")]
1098        LocalLimit(::prost::alloc::boxed::Box<super::LocalLimitExecNode>),
1099        #[prost(message, tag = "8")]
1100        Aggregate(::prost::alloc::boxed::Box<super::AggregateExecNode>),
1101        #[prost(message, tag = "9")]
1102        HashJoin(::prost::alloc::boxed::Box<super::HashJoinExecNode>),
1103        #[prost(message, tag = "10")]
1104        Sort(::prost::alloc::boxed::Box<super::SortExecNode>),
1105        #[prost(message, tag = "11")]
1106        CoalesceBatches(::prost::alloc::boxed::Box<super::CoalesceBatchesExecNode>),
1107        #[prost(message, tag = "12")]
1108        Filter(::prost::alloc::boxed::Box<super::FilterExecNode>),
1109        #[prost(message, tag = "13")]
1110        Merge(::prost::alloc::boxed::Box<super::CoalescePartitionsExecNode>),
1111        #[prost(message, tag = "14")]
1112        Repartition(::prost::alloc::boxed::Box<super::RepartitionExecNode>),
1113        #[prost(message, tag = "15")]
1114        Window(::prost::alloc::boxed::Box<super::WindowAggExecNode>),
1115        #[prost(message, tag = "16")]
1116        CrossJoin(::prost::alloc::boxed::Box<super::CrossJoinExecNode>),
1117        #[prost(message, tag = "17")]
1118        AvroScan(super::AvroScanExecNode),
1119        #[prost(message, tag = "18")]
1120        Extension(super::PhysicalExtensionNode),
1121        #[prost(message, tag = "19")]
1122        Union(super::UnionExecNode),
1123        #[prost(message, tag = "20")]
1124        Explain(super::ExplainExecNode),
1125        #[prost(message, tag = "21")]
1126        SortPreservingMerge(
1127            ::prost::alloc::boxed::Box<super::SortPreservingMergeExecNode>,
1128        ),
1129        #[prost(message, tag = "22")]
1130        NestedLoopJoin(::prost::alloc::boxed::Box<super::NestedLoopJoinExecNode>),
1131        #[prost(message, tag = "23")]
1132        Analyze(::prost::alloc::boxed::Box<super::AnalyzeExecNode>),
1133        #[prost(message, tag = "24")]
1134        JsonSink(::prost::alloc::boxed::Box<super::JsonSinkExecNode>),
1135        #[prost(message, tag = "25")]
1136        SymmetricHashJoin(::prost::alloc::boxed::Box<super::SymmetricHashJoinExecNode>),
1137        #[prost(message, tag = "26")]
1138        Interleave(super::InterleaveExecNode),
1139        #[prost(message, tag = "27")]
1140        PlaceholderRow(super::PlaceholderRowExecNode),
1141        #[prost(message, tag = "28")]
1142        CsvSink(::prost::alloc::boxed::Box<super::CsvSinkExecNode>),
1143        #[prost(message, tag = "29")]
1144        ParquetSink(::prost::alloc::boxed::Box<super::ParquetSinkExecNode>),
1145        #[prost(message, tag = "30")]
1146        Unnest(::prost::alloc::boxed::Box<super::UnnestExecNode>),
1147        #[prost(message, tag = "31")]
1148        JsonScan(super::JsonScanExecNode),
1149        #[prost(message, tag = "32")]
1150        Cooperative(::prost::alloc::boxed::Box<super::CooperativeExecNode>),
1151        #[prost(message, tag = "33")]
1152        GenerateSeries(super::GenerateSeriesNode),
1153        #[prost(message, tag = "34")]
1154        SortMergeJoin(::prost::alloc::boxed::Box<super::SortMergeJoinExecNode>),
1155        #[prost(message, tag = "35")]
1156        MemoryScan(super::MemoryScanExecNode),
1157        #[prost(message, tag = "36")]
1158        AsyncFunc(::prost::alloc::boxed::Box<super::AsyncFuncExecNode>),
1159    }
1160}
1161#[derive(Clone, PartialEq, ::prost::Message)]
1162pub struct PartitionColumn {
1163    #[prost(string, tag = "1")]
1164    pub name: ::prost::alloc::string::String,
1165    #[prost(message, optional, tag = "2")]
1166    pub arrow_type: ::core::option::Option<super::datafusion_common::ArrowType>,
1167}
1168#[derive(Clone, PartialEq, ::prost::Message)]
1169pub struct FileSinkConfig {
1170    #[prost(string, tag = "1")]
1171    pub object_store_url: ::prost::alloc::string::String,
1172    #[prost(message, repeated, tag = "2")]
1173    pub file_groups: ::prost::alloc::vec::Vec<PartitionedFile>,
1174    #[prost(string, repeated, tag = "3")]
1175    pub table_paths: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1176    #[prost(message, optional, tag = "4")]
1177    pub output_schema: ::core::option::Option<super::datafusion_common::Schema>,
1178    #[prost(message, repeated, tag = "5")]
1179    pub table_partition_cols: ::prost::alloc::vec::Vec<PartitionColumn>,
1180    #[prost(bool, tag = "9")]
1181    pub keep_partition_by_columns: bool,
1182    #[prost(enumeration = "InsertOp", tag = "10")]
1183    pub insert_op: i32,
1184    #[prost(string, tag = "11")]
1185    pub file_extension: ::prost::alloc::string::String,
1186}
1187#[derive(Clone, PartialEq, ::prost::Message)]
1188pub struct JsonSink {
1189    #[prost(message, optional, tag = "1")]
1190    pub config: ::core::option::Option<FileSinkConfig>,
1191    #[prost(message, optional, tag = "2")]
1192    pub writer_options: ::core::option::Option<
1193        super::datafusion_common::JsonWriterOptions,
1194    >,
1195}
1196#[derive(Clone, PartialEq, ::prost::Message)]
1197pub struct JsonSinkExecNode {
1198    #[prost(message, optional, boxed, tag = "1")]
1199    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1200    #[prost(message, optional, tag = "2")]
1201    pub sink: ::core::option::Option<JsonSink>,
1202    #[prost(message, optional, tag = "3")]
1203    pub sink_schema: ::core::option::Option<super::datafusion_common::Schema>,
1204    #[prost(message, optional, tag = "4")]
1205    pub sort_order: ::core::option::Option<PhysicalSortExprNodeCollection>,
1206}
1207#[derive(Clone, PartialEq, ::prost::Message)]
1208pub struct CsvSink {
1209    #[prost(message, optional, tag = "1")]
1210    pub config: ::core::option::Option<FileSinkConfig>,
1211    #[prost(message, optional, tag = "2")]
1212    pub writer_options: ::core::option::Option<
1213        super::datafusion_common::CsvWriterOptions,
1214    >,
1215}
1216#[derive(Clone, PartialEq, ::prost::Message)]
1217pub struct CsvSinkExecNode {
1218    #[prost(message, optional, boxed, tag = "1")]
1219    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1220    #[prost(message, optional, tag = "2")]
1221    pub sink: ::core::option::Option<CsvSink>,
1222    #[prost(message, optional, tag = "3")]
1223    pub sink_schema: ::core::option::Option<super::datafusion_common::Schema>,
1224    #[prost(message, optional, tag = "4")]
1225    pub sort_order: ::core::option::Option<PhysicalSortExprNodeCollection>,
1226}
1227#[derive(Clone, PartialEq, ::prost::Message)]
1228pub struct ParquetSink {
1229    #[prost(message, optional, tag = "1")]
1230    pub config: ::core::option::Option<FileSinkConfig>,
1231    #[prost(message, optional, tag = "2")]
1232    pub parquet_options: ::core::option::Option<
1233        super::datafusion_common::TableParquetOptions,
1234    >,
1235}
1236#[derive(Clone, PartialEq, ::prost::Message)]
1237pub struct ParquetSinkExecNode {
1238    #[prost(message, optional, boxed, tag = "1")]
1239    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1240    #[prost(message, optional, tag = "2")]
1241    pub sink: ::core::option::Option<ParquetSink>,
1242    #[prost(message, optional, tag = "3")]
1243    pub sink_schema: ::core::option::Option<super::datafusion_common::Schema>,
1244    #[prost(message, optional, tag = "4")]
1245    pub sort_order: ::core::option::Option<PhysicalSortExprNodeCollection>,
1246}
1247#[derive(Clone, PartialEq, ::prost::Message)]
1248pub struct UnnestExecNode {
1249    #[prost(message, optional, boxed, tag = "1")]
1250    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1251    #[prost(message, optional, tag = "2")]
1252    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1253    #[prost(message, repeated, tag = "3")]
1254    pub list_type_columns: ::prost::alloc::vec::Vec<ListUnnest>,
1255    #[prost(uint64, repeated, tag = "4")]
1256    pub struct_type_columns: ::prost::alloc::vec::Vec<u64>,
1257    #[prost(message, optional, tag = "5")]
1258    pub options: ::core::option::Option<UnnestOptions>,
1259}
1260#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1261pub struct ListUnnest {
1262    #[prost(uint32, tag = "1")]
1263    pub index_in_input_schema: u32,
1264    #[prost(uint32, tag = "2")]
1265    pub depth: u32,
1266}
1267#[derive(Clone, PartialEq, ::prost::Message)]
1268pub struct PhysicalExtensionNode {
1269    #[prost(bytes = "vec", tag = "1")]
1270    pub node: ::prost::alloc::vec::Vec<u8>,
1271    #[prost(message, repeated, tag = "2")]
1272    pub inputs: ::prost::alloc::vec::Vec<PhysicalPlanNode>,
1273}
1274/// physical expressions
1275#[derive(Clone, PartialEq, ::prost::Message)]
1276pub struct PhysicalExprNode {
1277    #[prost(
1278        oneof = "physical_expr_node::ExprType",
1279        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21"
1280    )]
1281    pub expr_type: ::core::option::Option<physical_expr_node::ExprType>,
1282}
1283/// Nested message and enum types in `PhysicalExprNode`.
1284pub mod physical_expr_node {
1285    #[derive(Clone, PartialEq, ::prost::Oneof)]
1286    pub enum ExprType {
1287        /// column references
1288        #[prost(message, tag = "1")]
1289        Column(super::PhysicalColumn),
1290        #[prost(message, tag = "2")]
1291        Literal(super::super::datafusion_common::ScalarValue),
1292        /// binary expressions
1293        #[prost(message, tag = "3")]
1294        BinaryExpr(::prost::alloc::boxed::Box<super::PhysicalBinaryExprNode>),
1295        /// aggregate expressions
1296        #[prost(message, tag = "4")]
1297        AggregateExpr(super::PhysicalAggregateExprNode),
1298        /// null checks
1299        #[prost(message, tag = "5")]
1300        IsNullExpr(::prost::alloc::boxed::Box<super::PhysicalIsNull>),
1301        #[prost(message, tag = "6")]
1302        IsNotNullExpr(::prost::alloc::boxed::Box<super::PhysicalIsNotNull>),
1303        #[prost(message, tag = "7")]
1304        NotExpr(::prost::alloc::boxed::Box<super::PhysicalNot>),
1305        #[prost(message, tag = "8")]
1306        Case(::prost::alloc::boxed::Box<super::PhysicalCaseNode>),
1307        #[prost(message, tag = "9")]
1308        Cast(::prost::alloc::boxed::Box<super::PhysicalCastNode>),
1309        #[prost(message, tag = "10")]
1310        Sort(::prost::alloc::boxed::Box<super::PhysicalSortExprNode>),
1311        #[prost(message, tag = "11")]
1312        Negative(::prost::alloc::boxed::Box<super::PhysicalNegativeNode>),
1313        #[prost(message, tag = "12")]
1314        InList(::prost::alloc::boxed::Box<super::PhysicalInListNode>),
1315        ///   was PhysicalScalarFunctionNode scalar_function = 13;
1316        #[prost(message, tag = "14")]
1317        TryCast(::prost::alloc::boxed::Box<super::PhysicalTryCastNode>),
1318        /// window expressions
1319        #[prost(message, tag = "15")]
1320        WindowExpr(super::PhysicalWindowExprNode),
1321        /// was PhysicalDateTimeIntervalExprNode date_time_interval_expr = 17;
1322        #[prost(message, tag = "16")]
1323        ScalarUdf(super::PhysicalScalarUdfNode),
1324        #[prost(message, tag = "18")]
1325        LikeExpr(::prost::alloc::boxed::Box<super::PhysicalLikeExprNode>),
1326        #[prost(message, tag = "19")]
1327        Extension(super::PhysicalExtensionExprNode),
1328        #[prost(message, tag = "20")]
1329        UnknownColumn(super::UnknownColumn),
1330        #[prost(message, tag = "21")]
1331        HashExpr(super::PhysicalHashExprNode),
1332    }
1333}
1334#[derive(Clone, PartialEq, ::prost::Message)]
1335pub struct PhysicalScalarUdfNode {
1336    #[prost(string, tag = "1")]
1337    pub name: ::prost::alloc::string::String,
1338    #[prost(message, repeated, tag = "2")]
1339    pub args: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1340    #[prost(bytes = "vec", optional, tag = "3")]
1341    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1342    #[prost(message, optional, tag = "4")]
1343    pub return_type: ::core::option::Option<super::datafusion_common::ArrowType>,
1344    #[prost(bool, tag = "5")]
1345    pub nullable: bool,
1346    #[prost(string, tag = "6")]
1347    pub return_field_name: ::prost::alloc::string::String,
1348}
1349#[derive(Clone, PartialEq, ::prost::Message)]
1350pub struct PhysicalAggregateExprNode {
1351    #[prost(message, repeated, tag = "2")]
1352    pub expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1353    #[prost(message, repeated, tag = "5")]
1354    pub ordering_req: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1355    #[prost(bool, tag = "3")]
1356    pub distinct: bool,
1357    #[prost(bool, tag = "6")]
1358    pub ignore_nulls: bool,
1359    #[prost(bytes = "vec", optional, tag = "7")]
1360    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1361    #[prost(string, tag = "8")]
1362    pub human_display: ::prost::alloc::string::String,
1363    #[prost(oneof = "physical_aggregate_expr_node::AggregateFunction", tags = "4")]
1364    pub aggregate_function: ::core::option::Option<
1365        physical_aggregate_expr_node::AggregateFunction,
1366    >,
1367}
1368/// Nested message and enum types in `PhysicalAggregateExprNode`.
1369pub mod physical_aggregate_expr_node {
1370    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1371    pub enum AggregateFunction {
1372        #[prost(string, tag = "4")]
1373        UserDefinedAggrFunction(::prost::alloc::string::String),
1374    }
1375}
1376#[derive(Clone, PartialEq, ::prost::Message)]
1377pub struct PhysicalWindowExprNode {
1378    #[prost(message, repeated, tag = "4")]
1379    pub args: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1380    #[prost(message, repeated, tag = "5")]
1381    pub partition_by: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1382    #[prost(message, repeated, tag = "6")]
1383    pub order_by: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1384    #[prost(message, optional, tag = "7")]
1385    pub window_frame: ::core::option::Option<WindowFrame>,
1386    #[prost(string, tag = "8")]
1387    pub name: ::prost::alloc::string::String,
1388    #[prost(bytes = "vec", optional, tag = "9")]
1389    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1390    #[prost(bool, tag = "11")]
1391    pub ignore_nulls: bool,
1392    #[prost(bool, tag = "12")]
1393    pub distinct: bool,
1394    #[prost(oneof = "physical_window_expr_node::WindowFunction", tags = "3, 10")]
1395    pub window_function: ::core::option::Option<
1396        physical_window_expr_node::WindowFunction,
1397    >,
1398}
1399/// Nested message and enum types in `PhysicalWindowExprNode`.
1400pub mod physical_window_expr_node {
1401    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1402    pub enum WindowFunction {
1403        /// BuiltInWindowFunction built_in_function = 2;
1404        #[prost(string, tag = "3")]
1405        UserDefinedAggrFunction(::prost::alloc::string::String),
1406        #[prost(string, tag = "10")]
1407        UserDefinedWindowFunction(::prost::alloc::string::String),
1408    }
1409}
1410#[derive(Clone, PartialEq, ::prost::Message)]
1411pub struct PhysicalIsNull {
1412    #[prost(message, optional, boxed, tag = "1")]
1413    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1414}
1415#[derive(Clone, PartialEq, ::prost::Message)]
1416pub struct PhysicalIsNotNull {
1417    #[prost(message, optional, boxed, tag = "1")]
1418    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1419}
1420#[derive(Clone, PartialEq, ::prost::Message)]
1421pub struct PhysicalNot {
1422    #[prost(message, optional, boxed, tag = "1")]
1423    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1424}
1425#[derive(Clone, PartialEq, ::prost::Message)]
1426pub struct PhysicalAliasNode {
1427    #[prost(message, optional, tag = "1")]
1428    pub expr: ::core::option::Option<PhysicalExprNode>,
1429    #[prost(string, tag = "2")]
1430    pub alias: ::prost::alloc::string::String,
1431}
1432#[derive(Clone, PartialEq, ::prost::Message)]
1433pub struct PhysicalBinaryExprNode {
1434    #[prost(message, optional, boxed, tag = "1")]
1435    pub l: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1436    #[prost(message, optional, boxed, tag = "2")]
1437    pub r: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1438    #[prost(string, tag = "3")]
1439    pub op: ::prost::alloc::string::String,
1440}
1441#[derive(Clone, PartialEq, ::prost::Message)]
1442pub struct PhysicalDateTimeIntervalExprNode {
1443    #[prost(message, optional, tag = "1")]
1444    pub l: ::core::option::Option<PhysicalExprNode>,
1445    #[prost(message, optional, tag = "2")]
1446    pub r: ::core::option::Option<PhysicalExprNode>,
1447    #[prost(string, tag = "3")]
1448    pub op: ::prost::alloc::string::String,
1449}
1450#[derive(Clone, PartialEq, ::prost::Message)]
1451pub struct PhysicalLikeExprNode {
1452    #[prost(bool, tag = "1")]
1453    pub negated: bool,
1454    #[prost(bool, tag = "2")]
1455    pub case_insensitive: bool,
1456    #[prost(message, optional, boxed, tag = "3")]
1457    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1458    #[prost(message, optional, boxed, tag = "4")]
1459    pub pattern: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1460}
1461#[derive(Clone, PartialEq, ::prost::Message)]
1462pub struct PhysicalSortExprNode {
1463    #[prost(message, optional, boxed, tag = "1")]
1464    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1465    #[prost(bool, tag = "2")]
1466    pub asc: bool,
1467    #[prost(bool, tag = "3")]
1468    pub nulls_first: bool,
1469}
1470#[derive(Clone, PartialEq, ::prost::Message)]
1471pub struct PhysicalWhenThen {
1472    #[prost(message, optional, tag = "1")]
1473    pub when_expr: ::core::option::Option<PhysicalExprNode>,
1474    #[prost(message, optional, tag = "2")]
1475    pub then_expr: ::core::option::Option<PhysicalExprNode>,
1476}
1477#[derive(Clone, PartialEq, ::prost::Message)]
1478pub struct PhysicalInListNode {
1479    #[prost(message, optional, boxed, tag = "1")]
1480    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1481    #[prost(message, repeated, tag = "2")]
1482    pub list: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1483    #[prost(bool, tag = "3")]
1484    pub negated: bool,
1485}
1486#[derive(Clone, PartialEq, ::prost::Message)]
1487pub struct PhysicalCaseNode {
1488    #[prost(message, optional, boxed, tag = "1")]
1489    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1490    #[prost(message, repeated, tag = "2")]
1491    pub when_then_expr: ::prost::alloc::vec::Vec<PhysicalWhenThen>,
1492    #[prost(message, optional, boxed, tag = "3")]
1493    pub else_expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1494}
1495#[derive(Clone, PartialEq, ::prost::Message)]
1496pub struct PhysicalTryCastNode {
1497    #[prost(message, optional, boxed, tag = "1")]
1498    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1499    #[prost(message, optional, tag = "2")]
1500    pub arrow_type: ::core::option::Option<super::datafusion_common::ArrowType>,
1501}
1502#[derive(Clone, PartialEq, ::prost::Message)]
1503pub struct PhysicalCastNode {
1504    #[prost(message, optional, boxed, tag = "1")]
1505    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1506    #[prost(message, optional, tag = "2")]
1507    pub arrow_type: ::core::option::Option<super::datafusion_common::ArrowType>,
1508}
1509#[derive(Clone, PartialEq, ::prost::Message)]
1510pub struct PhysicalNegativeNode {
1511    #[prost(message, optional, boxed, tag = "1")]
1512    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1513}
1514#[derive(Clone, PartialEq, ::prost::Message)]
1515pub struct PhysicalExtensionExprNode {
1516    #[prost(bytes = "vec", tag = "1")]
1517    pub expr: ::prost::alloc::vec::Vec<u8>,
1518    #[prost(message, repeated, tag = "2")]
1519    pub inputs: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1520}
1521#[derive(Clone, PartialEq, ::prost::Message)]
1522pub struct PhysicalHashExprNode {
1523    #[prost(message, repeated, tag = "1")]
1524    pub on_columns: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1525    #[prost(uint64, tag = "2")]
1526    pub seed0: u64,
1527    #[prost(uint64, tag = "3")]
1528    pub seed1: u64,
1529    #[prost(uint64, tag = "4")]
1530    pub seed2: u64,
1531    #[prost(uint64, tag = "5")]
1532    pub seed3: u64,
1533    #[prost(string, tag = "6")]
1534    pub description: ::prost::alloc::string::String,
1535}
1536#[derive(Clone, PartialEq, ::prost::Message)]
1537pub struct FilterExecNode {
1538    #[prost(message, optional, boxed, tag = "1")]
1539    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1540    #[prost(message, optional, tag = "2")]
1541    pub expr: ::core::option::Option<PhysicalExprNode>,
1542    #[prost(uint32, tag = "3")]
1543    pub default_filter_selectivity: u32,
1544    #[prost(uint32, repeated, tag = "9")]
1545    pub projection: ::prost::alloc::vec::Vec<u32>,
1546}
1547#[derive(Clone, PartialEq, ::prost::Message)]
1548pub struct FileGroup {
1549    #[prost(message, repeated, tag = "1")]
1550    pub files: ::prost::alloc::vec::Vec<PartitionedFile>,
1551}
1552#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1553pub struct ScanLimit {
1554    /// wrap into a message to make it optional
1555    #[prost(uint32, tag = "1")]
1556    pub limit: u32,
1557}
1558#[derive(Clone, PartialEq, ::prost::Message)]
1559pub struct PhysicalSortExprNodeCollection {
1560    #[prost(message, repeated, tag = "1")]
1561    pub physical_sort_expr_nodes: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1562}
1563#[derive(Clone, PartialEq, ::prost::Message)]
1564pub struct ProjectionExpr {
1565    #[prost(string, tag = "1")]
1566    pub alias: ::prost::alloc::string::String,
1567    #[prost(message, optional, tag = "2")]
1568    pub expr: ::core::option::Option<PhysicalExprNode>,
1569}
1570#[derive(Clone, PartialEq, ::prost::Message)]
1571pub struct ProjectionExprs {
1572    #[prost(message, repeated, tag = "1")]
1573    pub projections: ::prost::alloc::vec::Vec<ProjectionExpr>,
1574}
1575#[derive(Clone, PartialEq, ::prost::Message)]
1576pub struct FileScanExecConf {
1577    #[prost(message, repeated, tag = "1")]
1578    pub file_groups: ::prost::alloc::vec::Vec<FileGroup>,
1579    #[prost(message, optional, tag = "2")]
1580    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1581    #[prost(uint32, repeated, tag = "4")]
1582    pub projection: ::prost::alloc::vec::Vec<u32>,
1583    #[prost(message, optional, tag = "5")]
1584    pub limit: ::core::option::Option<ScanLimit>,
1585    #[prost(message, optional, tag = "6")]
1586    pub statistics: ::core::option::Option<super::datafusion_common::Statistics>,
1587    #[prost(string, repeated, tag = "7")]
1588    pub table_partition_cols: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1589    #[prost(string, tag = "8")]
1590    pub object_store_url: ::prost::alloc::string::String,
1591    #[prost(message, repeated, tag = "9")]
1592    pub output_ordering: ::prost::alloc::vec::Vec<PhysicalSortExprNodeCollection>,
1593    #[prost(message, optional, tag = "11")]
1594    pub constraints: ::core::option::Option<super::datafusion_common::Constraints>,
1595    #[prost(uint64, optional, tag = "12")]
1596    pub batch_size: ::core::option::Option<u64>,
1597    #[prost(message, optional, tag = "13")]
1598    pub projection_exprs: ::core::option::Option<ProjectionExprs>,
1599}
1600#[derive(Clone, PartialEq, ::prost::Message)]
1601pub struct ParquetScanExecNode {
1602    #[prost(message, optional, tag = "1")]
1603    pub base_conf: ::core::option::Option<FileScanExecConf>,
1604    #[prost(message, optional, tag = "3")]
1605    pub predicate: ::core::option::Option<PhysicalExprNode>,
1606    #[prost(message, optional, tag = "4")]
1607    pub parquet_options: ::core::option::Option<
1608        super::datafusion_common::TableParquetOptions,
1609    >,
1610}
1611#[derive(Clone, PartialEq, ::prost::Message)]
1612pub struct CsvScanExecNode {
1613    #[prost(message, optional, tag = "1")]
1614    pub base_conf: ::core::option::Option<FileScanExecConf>,
1615    #[prost(bool, tag = "2")]
1616    pub has_header: bool,
1617    #[prost(string, tag = "3")]
1618    pub delimiter: ::prost::alloc::string::String,
1619    #[prost(string, tag = "4")]
1620    pub quote: ::prost::alloc::string::String,
1621    #[prost(bool, tag = "7")]
1622    pub newlines_in_values: bool,
1623    #[prost(bool, tag = "8")]
1624    pub truncate_rows: bool,
1625    #[prost(oneof = "csv_scan_exec_node::OptionalEscape", tags = "5")]
1626    pub optional_escape: ::core::option::Option<csv_scan_exec_node::OptionalEscape>,
1627    #[prost(oneof = "csv_scan_exec_node::OptionalComment", tags = "6")]
1628    pub optional_comment: ::core::option::Option<csv_scan_exec_node::OptionalComment>,
1629}
1630/// Nested message and enum types in `CsvScanExecNode`.
1631pub mod csv_scan_exec_node {
1632    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1633    pub enum OptionalEscape {
1634        #[prost(string, tag = "5")]
1635        Escape(::prost::alloc::string::String),
1636    }
1637    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1638    pub enum OptionalComment {
1639        #[prost(string, tag = "6")]
1640        Comment(::prost::alloc::string::String),
1641    }
1642}
1643#[derive(Clone, PartialEq, ::prost::Message)]
1644pub struct JsonScanExecNode {
1645    #[prost(message, optional, tag = "1")]
1646    pub base_conf: ::core::option::Option<FileScanExecConf>,
1647}
1648#[derive(Clone, PartialEq, ::prost::Message)]
1649pub struct AvroScanExecNode {
1650    #[prost(message, optional, tag = "1")]
1651    pub base_conf: ::core::option::Option<FileScanExecConf>,
1652}
1653#[derive(Clone, PartialEq, ::prost::Message)]
1654pub struct MemoryScanExecNode {
1655    #[prost(bytes = "vec", repeated, tag = "1")]
1656    pub partitions: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
1657    #[prost(message, optional, tag = "2")]
1658    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1659    #[prost(uint32, repeated, tag = "3")]
1660    pub projection: ::prost::alloc::vec::Vec<u32>,
1661    #[prost(message, repeated, tag = "4")]
1662    pub sort_information: ::prost::alloc::vec::Vec<PhysicalSortExprNodeCollection>,
1663    #[prost(bool, tag = "5")]
1664    pub show_sizes: bool,
1665    #[prost(uint32, optional, tag = "6")]
1666    pub fetch: ::core::option::Option<u32>,
1667}
1668#[derive(Clone, PartialEq, ::prost::Message)]
1669pub struct CooperativeExecNode {
1670    #[prost(message, optional, boxed, tag = "1")]
1671    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1672}
1673#[derive(Clone, PartialEq, ::prost::Message)]
1674pub struct HashJoinExecNode {
1675    #[prost(message, optional, boxed, tag = "1")]
1676    pub left: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1677    #[prost(message, optional, boxed, tag = "2")]
1678    pub right: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1679    #[prost(message, repeated, tag = "3")]
1680    pub on: ::prost::alloc::vec::Vec<JoinOn>,
1681    #[prost(enumeration = "super::datafusion_common::JoinType", tag = "4")]
1682    pub join_type: i32,
1683    #[prost(enumeration = "PartitionMode", tag = "6")]
1684    pub partition_mode: i32,
1685    #[prost(enumeration = "super::datafusion_common::NullEquality", tag = "7")]
1686    pub null_equality: i32,
1687    #[prost(message, optional, tag = "8")]
1688    pub filter: ::core::option::Option<JoinFilter>,
1689    #[prost(uint32, repeated, tag = "9")]
1690    pub projection: ::prost::alloc::vec::Vec<u32>,
1691}
1692#[derive(Clone, PartialEq, ::prost::Message)]
1693pub struct SymmetricHashJoinExecNode {
1694    #[prost(message, optional, boxed, tag = "1")]
1695    pub left: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1696    #[prost(message, optional, boxed, tag = "2")]
1697    pub right: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1698    #[prost(message, repeated, tag = "3")]
1699    pub on: ::prost::alloc::vec::Vec<JoinOn>,
1700    #[prost(enumeration = "super::datafusion_common::JoinType", tag = "4")]
1701    pub join_type: i32,
1702    #[prost(enumeration = "StreamPartitionMode", tag = "6")]
1703    pub partition_mode: i32,
1704    #[prost(enumeration = "super::datafusion_common::NullEquality", tag = "7")]
1705    pub null_equality: i32,
1706    #[prost(message, optional, tag = "8")]
1707    pub filter: ::core::option::Option<JoinFilter>,
1708    #[prost(message, repeated, tag = "9")]
1709    pub left_sort_exprs: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1710    #[prost(message, repeated, tag = "10")]
1711    pub right_sort_exprs: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1712}
1713#[derive(Clone, PartialEq, ::prost::Message)]
1714pub struct InterleaveExecNode {
1715    #[prost(message, repeated, tag = "1")]
1716    pub inputs: ::prost::alloc::vec::Vec<PhysicalPlanNode>,
1717}
1718#[derive(Clone, PartialEq, ::prost::Message)]
1719pub struct UnionExecNode {
1720    #[prost(message, repeated, tag = "1")]
1721    pub inputs: ::prost::alloc::vec::Vec<PhysicalPlanNode>,
1722}
1723#[derive(Clone, PartialEq, ::prost::Message)]
1724pub struct ExplainExecNode {
1725    #[prost(message, optional, tag = "1")]
1726    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1727    #[prost(message, repeated, tag = "2")]
1728    pub stringified_plans: ::prost::alloc::vec::Vec<StringifiedPlan>,
1729    #[prost(bool, tag = "3")]
1730    pub verbose: bool,
1731}
1732#[derive(Clone, PartialEq, ::prost::Message)]
1733pub struct AnalyzeExecNode {
1734    #[prost(bool, tag = "1")]
1735    pub verbose: bool,
1736    #[prost(bool, tag = "2")]
1737    pub show_statistics: bool,
1738    #[prost(message, optional, boxed, tag = "3")]
1739    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1740    #[prost(message, optional, tag = "4")]
1741    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1742}
1743#[derive(Clone, PartialEq, ::prost::Message)]
1744pub struct CrossJoinExecNode {
1745    #[prost(message, optional, boxed, tag = "1")]
1746    pub left: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1747    #[prost(message, optional, boxed, tag = "2")]
1748    pub right: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1749}
1750#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1751pub struct PhysicalColumn {
1752    #[prost(string, tag = "1")]
1753    pub name: ::prost::alloc::string::String,
1754    #[prost(uint32, tag = "2")]
1755    pub index: u32,
1756}
1757#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1758pub struct UnknownColumn {
1759    #[prost(string, tag = "1")]
1760    pub name: ::prost::alloc::string::String,
1761}
1762#[derive(Clone, PartialEq, ::prost::Message)]
1763pub struct JoinOn {
1764    #[prost(message, optional, tag = "1")]
1765    pub left: ::core::option::Option<PhysicalExprNode>,
1766    #[prost(message, optional, tag = "2")]
1767    pub right: ::core::option::Option<PhysicalExprNode>,
1768}
1769#[derive(Clone, PartialEq, ::prost::Message)]
1770pub struct EmptyExecNode {
1771    #[prost(message, optional, tag = "1")]
1772    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1773}
1774#[derive(Clone, PartialEq, ::prost::Message)]
1775pub struct PlaceholderRowExecNode {
1776    #[prost(message, optional, tag = "1")]
1777    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1778}
1779#[derive(Clone, PartialEq, ::prost::Message)]
1780pub struct ProjectionExecNode {
1781    #[prost(message, optional, boxed, tag = "1")]
1782    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1783    #[prost(message, repeated, tag = "2")]
1784    pub expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1785    #[prost(string, repeated, tag = "3")]
1786    pub expr_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1787}
1788#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1789pub struct PartiallySortedInputOrderMode {
1790    #[prost(uint64, repeated, tag = "6")]
1791    pub columns: ::prost::alloc::vec::Vec<u64>,
1792}
1793#[derive(Clone, PartialEq, ::prost::Message)]
1794pub struct WindowAggExecNode {
1795    #[prost(message, optional, boxed, tag = "1")]
1796    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1797    #[prost(message, repeated, tag = "2")]
1798    pub window_expr: ::prost::alloc::vec::Vec<PhysicalWindowExprNode>,
1799    #[prost(message, repeated, tag = "5")]
1800    pub partition_keys: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1801    /// Set optional to `None` for `BoundedWindowAggExec`.
1802    #[prost(oneof = "window_agg_exec_node::InputOrderMode", tags = "7, 8, 9")]
1803    pub input_order_mode: ::core::option::Option<window_agg_exec_node::InputOrderMode>,
1804}
1805/// Nested message and enum types in `WindowAggExecNode`.
1806pub mod window_agg_exec_node {
1807    /// Set optional to `None` for `BoundedWindowAggExec`.
1808    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1809    pub enum InputOrderMode {
1810        #[prost(message, tag = "7")]
1811        Linear(super::super::datafusion_common::EmptyMessage),
1812        #[prost(message, tag = "8")]
1813        PartiallySorted(super::PartiallySortedInputOrderMode),
1814        #[prost(message, tag = "9")]
1815        Sorted(super::super::datafusion_common::EmptyMessage),
1816    }
1817}
1818#[derive(Clone, PartialEq, ::prost::Message)]
1819pub struct MaybeFilter {
1820    #[prost(message, optional, tag = "1")]
1821    pub expr: ::core::option::Option<PhysicalExprNode>,
1822}
1823#[derive(Clone, PartialEq, ::prost::Message)]
1824pub struct MaybePhysicalSortExprs {
1825    #[prost(message, repeated, tag = "1")]
1826    pub sort_expr: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1827}
1828#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1829pub struct AggLimit {
1830    /// wrap into a message to make it optional
1831    #[prost(uint64, tag = "1")]
1832    pub limit: u64,
1833}
1834#[derive(Clone, PartialEq, ::prost::Message)]
1835pub struct AggregateExecNode {
1836    #[prost(message, repeated, tag = "1")]
1837    pub group_expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1838    #[prost(message, repeated, tag = "2")]
1839    pub aggr_expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1840    #[prost(enumeration = "AggregateMode", tag = "3")]
1841    pub mode: i32,
1842    #[prost(message, optional, boxed, tag = "4")]
1843    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1844    #[prost(string, repeated, tag = "5")]
1845    pub group_expr_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1846    #[prost(string, repeated, tag = "6")]
1847    pub aggr_expr_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1848    /// we need the input schema to the partial aggregate to pass to the final aggregate
1849    #[prost(message, optional, tag = "7")]
1850    pub input_schema: ::core::option::Option<super::datafusion_common::Schema>,
1851    #[prost(message, repeated, tag = "8")]
1852    pub null_expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1853    #[prost(bool, repeated, tag = "9")]
1854    pub groups: ::prost::alloc::vec::Vec<bool>,
1855    #[prost(message, repeated, tag = "10")]
1856    pub filter_expr: ::prost::alloc::vec::Vec<MaybeFilter>,
1857    #[prost(message, optional, tag = "11")]
1858    pub limit: ::core::option::Option<AggLimit>,
1859    #[prost(bool, tag = "12")]
1860    pub has_grouping_set: bool,
1861}
1862#[derive(Clone, PartialEq, ::prost::Message)]
1863pub struct GlobalLimitExecNode {
1864    #[prost(message, optional, boxed, tag = "1")]
1865    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1866    /// The number of rows to skip before fetch
1867    #[prost(uint32, tag = "2")]
1868    pub skip: u32,
1869    /// Maximum number of rows to fetch; negative means no limit
1870    #[prost(int64, tag = "3")]
1871    pub fetch: i64,
1872}
1873#[derive(Clone, PartialEq, ::prost::Message)]
1874pub struct LocalLimitExecNode {
1875    #[prost(message, optional, boxed, tag = "1")]
1876    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1877    #[prost(uint32, tag = "2")]
1878    pub fetch: u32,
1879}
1880#[derive(Clone, PartialEq, ::prost::Message)]
1881pub struct SortExecNode {
1882    #[prost(message, optional, boxed, tag = "1")]
1883    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1884    #[prost(message, repeated, tag = "2")]
1885    pub expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1886    /// Maximum number of highest/lowest rows to fetch; negative means no limit
1887    #[prost(int64, tag = "3")]
1888    pub fetch: i64,
1889    #[prost(bool, tag = "4")]
1890    pub preserve_partitioning: bool,
1891}
1892#[derive(Clone, PartialEq, ::prost::Message)]
1893pub struct SortPreservingMergeExecNode {
1894    #[prost(message, optional, boxed, tag = "1")]
1895    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1896    #[prost(message, repeated, tag = "2")]
1897    pub expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1898    /// Maximum number of highest/lowest rows to fetch; negative means no limit
1899    #[prost(int64, tag = "3")]
1900    pub fetch: i64,
1901}
1902#[derive(Clone, PartialEq, ::prost::Message)]
1903pub struct NestedLoopJoinExecNode {
1904    #[prost(message, optional, boxed, tag = "1")]
1905    pub left: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1906    #[prost(message, optional, boxed, tag = "2")]
1907    pub right: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1908    #[prost(enumeration = "super::datafusion_common::JoinType", tag = "3")]
1909    pub join_type: i32,
1910    #[prost(message, optional, tag = "4")]
1911    pub filter: ::core::option::Option<JoinFilter>,
1912    #[prost(uint32, repeated, tag = "5")]
1913    pub projection: ::prost::alloc::vec::Vec<u32>,
1914}
1915#[derive(Clone, PartialEq, ::prost::Message)]
1916pub struct CoalesceBatchesExecNode {
1917    #[prost(message, optional, boxed, tag = "1")]
1918    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1919    #[prost(uint32, tag = "2")]
1920    pub target_batch_size: u32,
1921    #[prost(uint32, optional, tag = "3")]
1922    pub fetch: ::core::option::Option<u32>,
1923}
1924#[derive(Clone, PartialEq, ::prost::Message)]
1925pub struct CoalescePartitionsExecNode {
1926    #[prost(message, optional, boxed, tag = "1")]
1927    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1928    #[prost(uint32, optional, tag = "2")]
1929    pub fetch: ::core::option::Option<u32>,
1930}
1931#[derive(Clone, PartialEq, ::prost::Message)]
1932pub struct PhysicalHashRepartition {
1933    #[prost(message, repeated, tag = "1")]
1934    pub hash_expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1935    #[prost(uint64, tag = "2")]
1936    pub partition_count: u64,
1937}
1938#[derive(Clone, PartialEq, ::prost::Message)]
1939pub struct RepartitionExecNode {
1940    #[prost(message, optional, boxed, tag = "1")]
1941    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1942    /// oneof partition_method {
1943    ///    uint64 round_robin = 2;
1944    ///    PhysicalHashRepartition hash = 3;
1945    ///    uint64 unknown = 4;
1946    /// }
1947    #[prost(message, optional, tag = "5")]
1948    pub partitioning: ::core::option::Option<Partitioning>,
1949}
1950#[derive(Clone, PartialEq, ::prost::Message)]
1951pub struct Partitioning {
1952    #[prost(oneof = "partitioning::PartitionMethod", tags = "1, 2, 3")]
1953    pub partition_method: ::core::option::Option<partitioning::PartitionMethod>,
1954}
1955/// Nested message and enum types in `Partitioning`.
1956pub mod partitioning {
1957    #[derive(Clone, PartialEq, ::prost::Oneof)]
1958    pub enum PartitionMethod {
1959        #[prost(uint64, tag = "1")]
1960        RoundRobin(u64),
1961        #[prost(message, tag = "2")]
1962        Hash(super::PhysicalHashRepartition),
1963        #[prost(uint64, tag = "3")]
1964        Unknown(u64),
1965    }
1966}
1967#[derive(Clone, PartialEq, ::prost::Message)]
1968pub struct JoinFilter {
1969    #[prost(message, optional, tag = "1")]
1970    pub expression: ::core::option::Option<PhysicalExprNode>,
1971    #[prost(message, repeated, tag = "2")]
1972    pub column_indices: ::prost::alloc::vec::Vec<ColumnIndex>,
1973    #[prost(message, optional, tag = "3")]
1974    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1975}
1976#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1977pub struct ColumnIndex {
1978    #[prost(uint32, tag = "1")]
1979    pub index: u32,
1980    #[prost(enumeration = "super::datafusion_common::JoinSide", tag = "2")]
1981    pub side: i32,
1982}
1983#[derive(Clone, PartialEq, ::prost::Message)]
1984pub struct PartitionedFile {
1985    #[prost(string, tag = "1")]
1986    pub path: ::prost::alloc::string::String,
1987    #[prost(uint64, tag = "2")]
1988    pub size: u64,
1989    #[prost(uint64, tag = "3")]
1990    pub last_modified_ns: u64,
1991    #[prost(message, repeated, tag = "4")]
1992    pub partition_values: ::prost::alloc::vec::Vec<
1993        super::datafusion_common::ScalarValue,
1994    >,
1995    #[prost(message, optional, tag = "5")]
1996    pub range: ::core::option::Option<FileRange>,
1997    #[prost(message, optional, tag = "6")]
1998    pub statistics: ::core::option::Option<super::datafusion_common::Statistics>,
1999}
2000#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2001pub struct FileRange {
2002    #[prost(int64, tag = "1")]
2003    pub start: i64,
2004    #[prost(int64, tag = "2")]
2005    pub end: i64,
2006}
2007#[derive(Clone, PartialEq, ::prost::Message)]
2008pub struct PartitionStats {
2009    #[prost(int64, tag = "1")]
2010    pub num_rows: i64,
2011    #[prost(int64, tag = "2")]
2012    pub num_batches: i64,
2013    #[prost(int64, tag = "3")]
2014    pub num_bytes: i64,
2015    #[prost(message, repeated, tag = "4")]
2016    pub column_stats: ::prost::alloc::vec::Vec<super::datafusion_common::ColumnStats>,
2017}
2018#[derive(Clone, PartialEq, ::prost::Message)]
2019pub struct RecursiveQueryNode {
2020    #[prost(string, tag = "1")]
2021    pub name: ::prost::alloc::string::String,
2022    #[prost(message, optional, boxed, tag = "2")]
2023    pub static_term: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
2024    #[prost(message, optional, boxed, tag = "3")]
2025    pub recursive_term: ::core::option::Option<
2026        ::prost::alloc::boxed::Box<LogicalPlanNode>,
2027    >,
2028    #[prost(bool, tag = "4")]
2029    pub is_distinct: bool,
2030}
2031#[derive(Clone, PartialEq, ::prost::Message)]
2032pub struct CteWorkTableScanNode {
2033    #[prost(string, tag = "1")]
2034    pub name: ::prost::alloc::string::String,
2035    #[prost(message, optional, tag = "2")]
2036    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
2037}
2038#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2039pub struct GenerateSeriesArgsContainsNull {
2040    #[prost(enumeration = "GenerateSeriesName", tag = "1")]
2041    pub name: i32,
2042}
2043#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2044pub struct GenerateSeriesArgsInt64 {
2045    #[prost(int64, tag = "1")]
2046    pub start: i64,
2047    #[prost(int64, tag = "2")]
2048    pub end: i64,
2049    #[prost(int64, tag = "3")]
2050    pub step: i64,
2051    #[prost(bool, tag = "4")]
2052    pub include_end: bool,
2053    #[prost(enumeration = "GenerateSeriesName", tag = "5")]
2054    pub name: i32,
2055}
2056#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2057pub struct GenerateSeriesArgsTimestamp {
2058    #[prost(int64, tag = "1")]
2059    pub start: i64,
2060    #[prost(int64, tag = "2")]
2061    pub end: i64,
2062    #[prost(message, optional, tag = "3")]
2063    pub step: ::core::option::Option<
2064        super::datafusion_common::IntervalMonthDayNanoValue,
2065    >,
2066    #[prost(string, optional, tag = "4")]
2067    pub tz: ::core::option::Option<::prost::alloc::string::String>,
2068    #[prost(bool, tag = "5")]
2069    pub include_end: bool,
2070    #[prost(enumeration = "GenerateSeriesName", tag = "6")]
2071    pub name: i32,
2072}
2073#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2074pub struct GenerateSeriesArgsDate {
2075    #[prost(int64, tag = "1")]
2076    pub start: i64,
2077    #[prost(int64, tag = "2")]
2078    pub end: i64,
2079    #[prost(message, optional, tag = "3")]
2080    pub step: ::core::option::Option<
2081        super::datafusion_common::IntervalMonthDayNanoValue,
2082    >,
2083    #[prost(bool, tag = "4")]
2084    pub include_end: bool,
2085    #[prost(enumeration = "GenerateSeriesName", tag = "5")]
2086    pub name: i32,
2087}
2088#[derive(Clone, PartialEq, ::prost::Message)]
2089pub struct GenerateSeriesNode {
2090    #[prost(message, optional, tag = "1")]
2091    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
2092    #[prost(uint32, tag = "2")]
2093    pub target_batch_size: u32,
2094    #[prost(oneof = "generate_series_node::Args", tags = "3, 4, 5, 6")]
2095    pub args: ::core::option::Option<generate_series_node::Args>,
2096}
2097/// Nested message and enum types in `GenerateSeriesNode`.
2098pub mod generate_series_node {
2099    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
2100    pub enum Args {
2101        #[prost(message, tag = "3")]
2102        ContainsNull(super::GenerateSeriesArgsContainsNull),
2103        #[prost(message, tag = "4")]
2104        Int64Args(super::GenerateSeriesArgsInt64),
2105        #[prost(message, tag = "5")]
2106        TimestampArgs(super::GenerateSeriesArgsTimestamp),
2107        #[prost(message, tag = "6")]
2108        DateArgs(super::GenerateSeriesArgsDate),
2109    }
2110}
2111#[derive(Clone, PartialEq, ::prost::Message)]
2112pub struct SortMergeJoinExecNode {
2113    #[prost(message, optional, boxed, tag = "1")]
2114    pub left: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
2115    #[prost(message, optional, boxed, tag = "2")]
2116    pub right: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
2117    #[prost(message, repeated, tag = "3")]
2118    pub on: ::prost::alloc::vec::Vec<JoinOn>,
2119    #[prost(enumeration = "super::datafusion_common::JoinType", tag = "4")]
2120    pub join_type: i32,
2121    #[prost(message, optional, tag = "5")]
2122    pub filter: ::core::option::Option<JoinFilter>,
2123    #[prost(message, repeated, tag = "6")]
2124    pub sort_options: ::prost::alloc::vec::Vec<SortExprNode>,
2125    #[prost(enumeration = "super::datafusion_common::NullEquality", tag = "7")]
2126    pub null_equality: i32,
2127}
2128#[derive(Clone, PartialEq, ::prost::Message)]
2129pub struct AsyncFuncExecNode {
2130    #[prost(message, optional, boxed, tag = "1")]
2131    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
2132    #[prost(message, repeated, tag = "2")]
2133    pub async_exprs: ::prost::alloc::vec::Vec<PhysicalExprNode>,
2134    #[prost(string, repeated, tag = "3")]
2135    pub async_expr_names: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2136}
2137#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2138#[repr(i32)]
2139pub enum WindowFrameUnits {
2140    Rows = 0,
2141    Range = 1,
2142    Groups = 2,
2143}
2144impl WindowFrameUnits {
2145    /// String value of the enum field names used in the ProtoBuf definition.
2146    ///
2147    /// The values are not transformed in any way and thus are considered stable
2148    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2149    pub fn as_str_name(&self) -> &'static str {
2150        match self {
2151            Self::Rows => "ROWS",
2152            Self::Range => "RANGE",
2153            Self::Groups => "GROUPS",
2154        }
2155    }
2156    /// Creates an enum from field names used in the ProtoBuf definition.
2157    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2158        match value {
2159            "ROWS" => Some(Self::Rows),
2160            "RANGE" => Some(Self::Range),
2161            "GROUPS" => Some(Self::Groups),
2162            _ => None,
2163        }
2164    }
2165}
2166#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2167#[repr(i32)]
2168pub enum WindowFrameBoundType {
2169    CurrentRow = 0,
2170    Preceding = 1,
2171    Following = 2,
2172}
2173impl WindowFrameBoundType {
2174    /// String value of the enum field names used in the ProtoBuf definition.
2175    ///
2176    /// The values are not transformed in any way and thus are considered stable
2177    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2178    pub fn as_str_name(&self) -> &'static str {
2179        match self {
2180            Self::CurrentRow => "CURRENT_ROW",
2181            Self::Preceding => "PRECEDING",
2182            Self::Following => "FOLLOWING",
2183        }
2184    }
2185    /// Creates an enum from field names used in the ProtoBuf definition.
2186    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2187        match value {
2188            "CURRENT_ROW" => Some(Self::CurrentRow),
2189            "PRECEDING" => Some(Self::Preceding),
2190            "FOLLOWING" => Some(Self::Following),
2191            _ => None,
2192        }
2193    }
2194}
2195#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2196#[repr(i32)]
2197pub enum NullTreatment {
2198    RespectNulls = 0,
2199    IgnoreNulls = 1,
2200}
2201impl NullTreatment {
2202    /// String value of the enum field names used in the ProtoBuf definition.
2203    ///
2204    /// The values are not transformed in any way and thus are considered stable
2205    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2206    pub fn as_str_name(&self) -> &'static str {
2207        match self {
2208            Self::RespectNulls => "RESPECT_NULLS",
2209            Self::IgnoreNulls => "IGNORE_NULLS",
2210        }
2211    }
2212    /// Creates an enum from field names used in the ProtoBuf definition.
2213    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2214        match value {
2215            "RESPECT_NULLS" => Some(Self::RespectNulls),
2216            "IGNORE_NULLS" => Some(Self::IgnoreNulls),
2217            _ => None,
2218        }
2219    }
2220}
2221#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2222#[repr(i32)]
2223pub enum DateUnit {
2224    Day = 0,
2225    DateMillisecond = 1,
2226}
2227impl DateUnit {
2228    /// String value of the enum field names used in the ProtoBuf definition.
2229    ///
2230    /// The values are not transformed in any way and thus are considered stable
2231    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2232    pub fn as_str_name(&self) -> &'static str {
2233        match self {
2234            Self::Day => "Day",
2235            Self::DateMillisecond => "DateMillisecond",
2236        }
2237    }
2238    /// Creates an enum from field names used in the ProtoBuf definition.
2239    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2240        match value {
2241            "Day" => Some(Self::Day),
2242            "DateMillisecond" => Some(Self::DateMillisecond),
2243            _ => None,
2244        }
2245    }
2246}
2247#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2248#[repr(i32)]
2249pub enum InsertOp {
2250    Append = 0,
2251    Overwrite = 1,
2252    Replace = 2,
2253}
2254impl InsertOp {
2255    /// String value of the enum field names used in the ProtoBuf definition.
2256    ///
2257    /// The values are not transformed in any way and thus are considered stable
2258    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2259    pub fn as_str_name(&self) -> &'static str {
2260        match self {
2261            Self::Append => "Append",
2262            Self::Overwrite => "Overwrite",
2263            Self::Replace => "Replace",
2264        }
2265    }
2266    /// Creates an enum from field names used in the ProtoBuf definition.
2267    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2268        match value {
2269            "Append" => Some(Self::Append),
2270            "Overwrite" => Some(Self::Overwrite),
2271            "Replace" => Some(Self::Replace),
2272            _ => None,
2273        }
2274    }
2275}
2276#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2277#[repr(i32)]
2278pub enum PartitionMode {
2279    CollectLeft = 0,
2280    Partitioned = 1,
2281    Auto = 2,
2282}
2283impl PartitionMode {
2284    /// String value of the enum field names used in the ProtoBuf definition.
2285    ///
2286    /// The values are not transformed in any way and thus are considered stable
2287    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2288    pub fn as_str_name(&self) -> &'static str {
2289        match self {
2290            Self::CollectLeft => "COLLECT_LEFT",
2291            Self::Partitioned => "PARTITIONED",
2292            Self::Auto => "AUTO",
2293        }
2294    }
2295    /// Creates an enum from field names used in the ProtoBuf definition.
2296    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2297        match value {
2298            "COLLECT_LEFT" => Some(Self::CollectLeft),
2299            "PARTITIONED" => Some(Self::Partitioned),
2300            "AUTO" => Some(Self::Auto),
2301            _ => None,
2302        }
2303    }
2304}
2305#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2306#[repr(i32)]
2307pub enum StreamPartitionMode {
2308    SinglePartition = 0,
2309    PartitionedExec = 1,
2310}
2311impl StreamPartitionMode {
2312    /// String value of the enum field names used in the ProtoBuf definition.
2313    ///
2314    /// The values are not transformed in any way and thus are considered stable
2315    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2316    pub fn as_str_name(&self) -> &'static str {
2317        match self {
2318            Self::SinglePartition => "SINGLE_PARTITION",
2319            Self::PartitionedExec => "PARTITIONED_EXEC",
2320        }
2321    }
2322    /// Creates an enum from field names used in the ProtoBuf definition.
2323    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2324        match value {
2325            "SINGLE_PARTITION" => Some(Self::SinglePartition),
2326            "PARTITIONED_EXEC" => Some(Self::PartitionedExec),
2327            _ => None,
2328        }
2329    }
2330}
2331#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2332#[repr(i32)]
2333pub enum AggregateMode {
2334    Partial = 0,
2335    Final = 1,
2336    FinalPartitioned = 2,
2337    Single = 3,
2338    SinglePartitioned = 4,
2339}
2340impl AggregateMode {
2341    /// String value of the enum field names used in the ProtoBuf definition.
2342    ///
2343    /// The values are not transformed in any way and thus are considered stable
2344    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2345    pub fn as_str_name(&self) -> &'static str {
2346        match self {
2347            Self::Partial => "PARTIAL",
2348            Self::Final => "FINAL",
2349            Self::FinalPartitioned => "FINAL_PARTITIONED",
2350            Self::Single => "SINGLE",
2351            Self::SinglePartitioned => "SINGLE_PARTITIONED",
2352        }
2353    }
2354    /// Creates an enum from field names used in the ProtoBuf definition.
2355    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2356        match value {
2357            "PARTIAL" => Some(Self::Partial),
2358            "FINAL" => Some(Self::Final),
2359            "FINAL_PARTITIONED" => Some(Self::FinalPartitioned),
2360            "SINGLE" => Some(Self::Single),
2361            "SINGLE_PARTITIONED" => Some(Self::SinglePartitioned),
2362            _ => None,
2363        }
2364    }
2365}
2366#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2367#[repr(i32)]
2368pub enum GenerateSeriesName {
2369    GsGenerateSeries = 0,
2370    GsRange = 1,
2371}
2372impl GenerateSeriesName {
2373    /// String value of the enum field names used in the ProtoBuf definition.
2374    ///
2375    /// The values are not transformed in any way and thus are considered stable
2376    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2377    pub fn as_str_name(&self) -> &'static str {
2378        match self {
2379            Self::GsGenerateSeries => "GS_GENERATE_SERIES",
2380            Self::GsRange => "GS_RANGE",
2381        }
2382    }
2383    /// Creates an enum from field names used in the ProtoBuf definition.
2384    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2385        match value {
2386            "GS_GENERATE_SERIES" => Some(Self::GsGenerateSeries),
2387            "GS_RANGE" => Some(Self::GsRange),
2388            _ => None,
2389        }
2390    }
2391}