Skip to main content

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        Truncate = 6,
448    }
449    impl Type {
450        /// String value of the enum field names used in the ProtoBuf definition.
451        ///
452        /// The values are not transformed in any way and thus are considered stable
453        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
454        pub fn as_str_name(&self) -> &'static str {
455            match self {
456                Self::Update => "UPDATE",
457                Self::Delete => "DELETE",
458                Self::Ctas => "CTAS",
459                Self::InsertAppend => "INSERT_APPEND",
460                Self::InsertOverwrite => "INSERT_OVERWRITE",
461                Self::InsertReplace => "INSERT_REPLACE",
462                Self::Truncate => "TRUNCATE",
463            }
464        }
465        /// Creates an enum from field names used in the ProtoBuf definition.
466        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
467            match value {
468                "UPDATE" => Some(Self::Update),
469                "DELETE" => Some(Self::Delete),
470                "CTAS" => Some(Self::Ctas),
471                "INSERT_APPEND" => Some(Self::InsertAppend),
472                "INSERT_OVERWRITE" => Some(Self::InsertOverwrite),
473                "INSERT_REPLACE" => Some(Self::InsertReplace),
474                "TRUNCATE" => Some(Self::Truncate),
475                _ => None,
476            }
477        }
478    }
479}
480#[derive(Clone, PartialEq, ::prost::Message)]
481pub struct UnnestNode {
482    #[prost(message, optional, boxed, tag = "1")]
483    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
484    #[prost(message, repeated, tag = "2")]
485    pub exec_columns: ::prost::alloc::vec::Vec<super::datafusion_common::Column>,
486    #[prost(message, repeated, tag = "3")]
487    pub list_type_columns: ::prost::alloc::vec::Vec<ColumnUnnestListItem>,
488    #[prost(uint64, repeated, tag = "4")]
489    pub struct_type_columns: ::prost::alloc::vec::Vec<u64>,
490    #[prost(uint64, repeated, tag = "5")]
491    pub dependency_indices: ::prost::alloc::vec::Vec<u64>,
492    #[prost(message, optional, tag = "6")]
493    pub schema: ::core::option::Option<super::datafusion_common::DfSchema>,
494    #[prost(message, optional, tag = "7")]
495    pub options: ::core::option::Option<UnnestOptions>,
496}
497#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
498pub struct ColumnUnnestListItem {
499    #[prost(uint32, tag = "1")]
500    pub input_index: u32,
501    #[prost(message, optional, tag = "2")]
502    pub recursion: ::core::option::Option<ColumnUnnestListRecursion>,
503}
504#[derive(Clone, PartialEq, ::prost::Message)]
505pub struct ColumnUnnestListRecursions {
506    #[prost(message, repeated, tag = "2")]
507    pub recursions: ::prost::alloc::vec::Vec<ColumnUnnestListRecursion>,
508}
509#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
510pub struct ColumnUnnestListRecursion {
511    #[prost(message, optional, tag = "1")]
512    pub output_column: ::core::option::Option<super::datafusion_common::Column>,
513    #[prost(uint32, tag = "2")]
514    pub depth: u32,
515}
516#[derive(Clone, PartialEq, ::prost::Message)]
517pub struct UnnestOptions {
518    #[prost(bool, tag = "1")]
519    pub preserve_nulls: bool,
520    #[prost(message, repeated, tag = "2")]
521    pub recursions: ::prost::alloc::vec::Vec<RecursionUnnestOption>,
522}
523#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
524pub struct RecursionUnnestOption {
525    #[prost(message, optional, tag = "1")]
526    pub output_column: ::core::option::Option<super::datafusion_common::Column>,
527    #[prost(message, optional, tag = "2")]
528    pub input_column: ::core::option::Option<super::datafusion_common::Column>,
529    #[prost(uint32, tag = "3")]
530    pub depth: u32,
531}
532#[derive(Clone, PartialEq, ::prost::Message)]
533pub struct UnionNode {
534    #[prost(message, repeated, tag = "1")]
535    pub inputs: ::prost::alloc::vec::Vec<LogicalPlanNode>,
536}
537#[derive(Clone, PartialEq, ::prost::Message)]
538pub struct CrossJoinNode {
539    #[prost(message, optional, boxed, tag = "1")]
540    pub left: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
541    #[prost(message, optional, boxed, tag = "2")]
542    pub right: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
543}
544#[derive(Clone, PartialEq, ::prost::Message)]
545pub struct LimitNode {
546    #[prost(message, optional, boxed, tag = "1")]
547    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
548    /// The number of rows to skip before fetch; non-positive means don't skip any
549    #[prost(int64, tag = "2")]
550    pub skip: i64,
551    /// Maximum number of rows to fetch; negative means no limit
552    #[prost(int64, tag = "3")]
553    pub fetch: i64,
554}
555#[derive(Clone, PartialEq, ::prost::Message)]
556pub struct SelectionExecNode {
557    #[prost(message, optional, tag = "1")]
558    pub expr: ::core::option::Option<LogicalExprNode>,
559}
560#[derive(Clone, PartialEq, ::prost::Message)]
561pub struct SubqueryAliasNode {
562    #[prost(message, optional, boxed, tag = "1")]
563    pub input: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
564    #[prost(message, optional, tag = "3")]
565    pub alias: ::core::option::Option<TableReference>,
566}
567/// logical expressions
568#[derive(Clone, PartialEq, ::prost::Message)]
569pub struct LogicalExprNode {
570    #[prost(
571        oneof = "logical_expr_node::ExprType",
572        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"
573    )]
574    pub expr_type: ::core::option::Option<logical_expr_node::ExprType>,
575}
576/// Nested message and enum types in `LogicalExprNode`.
577pub mod logical_expr_node {
578    #[derive(Clone, PartialEq, ::prost::Oneof)]
579    pub enum ExprType {
580        /// column references
581        #[prost(message, tag = "1")]
582        Column(super::super::datafusion_common::Column),
583        /// alias
584        #[prost(message, tag = "2")]
585        Alias(::prost::alloc::boxed::Box<super::AliasNode>),
586        #[prost(message, tag = "3")]
587        Literal(super::super::datafusion_common::ScalarValue),
588        /// binary expressions
589        #[prost(message, tag = "4")]
590        BinaryExpr(super::BinaryExprNode),
591        /// null checks
592        #[prost(message, tag = "6")]
593        IsNullExpr(::prost::alloc::boxed::Box<super::IsNull>),
594        #[prost(message, tag = "7")]
595        IsNotNullExpr(::prost::alloc::boxed::Box<super::IsNotNull>),
596        #[prost(message, tag = "8")]
597        NotExpr(::prost::alloc::boxed::Box<super::Not>),
598        #[prost(message, tag = "9")]
599        Between(::prost::alloc::boxed::Box<super::BetweenNode>),
600        #[prost(message, tag = "10")]
601        Case(::prost::alloc::boxed::Box<super::CaseNode>),
602        #[prost(message, tag = "11")]
603        Cast(::prost::alloc::boxed::Box<super::CastNode>),
604        #[prost(message, tag = "13")]
605        Negative(::prost::alloc::boxed::Box<super::NegativeNode>),
606        #[prost(message, tag = "14")]
607        InList(::prost::alloc::boxed::Box<super::InListNode>),
608        #[prost(message, tag = "15")]
609        Wildcard(super::Wildcard),
610        /// was  ScalarFunctionNode scalar_function = 16;
611        #[prost(message, tag = "17")]
612        TryCast(::prost::alloc::boxed::Box<super::TryCastNode>),
613        /// window expressions
614        #[prost(message, tag = "18")]
615        WindowExpr(::prost::alloc::boxed::Box<super::WindowExprNode>),
616        /// AggregateUDF expressions
617        #[prost(message, tag = "19")]
618        AggregateUdfExpr(::prost::alloc::boxed::Box<super::AggregateUdfExprNode>),
619        /// Scalar UDF expressions
620        #[prost(message, tag = "20")]
621        ScalarUdfExpr(super::ScalarUdfExprNode),
622        #[prost(message, tag = "22")]
623        GroupingSet(super::GroupingSetNode),
624        #[prost(message, tag = "23")]
625        Cube(super::CubeNode),
626        #[prost(message, tag = "24")]
627        Rollup(super::RollupNode),
628        #[prost(message, tag = "25")]
629        IsTrue(::prost::alloc::boxed::Box<super::IsTrue>),
630        #[prost(message, tag = "26")]
631        IsFalse(::prost::alloc::boxed::Box<super::IsFalse>),
632        #[prost(message, tag = "27")]
633        IsUnknown(::prost::alloc::boxed::Box<super::IsUnknown>),
634        #[prost(message, tag = "28")]
635        IsNotTrue(::prost::alloc::boxed::Box<super::IsNotTrue>),
636        #[prost(message, tag = "29")]
637        IsNotFalse(::prost::alloc::boxed::Box<super::IsNotFalse>),
638        #[prost(message, tag = "30")]
639        IsNotUnknown(::prost::alloc::boxed::Box<super::IsNotUnknown>),
640        #[prost(message, tag = "31")]
641        Like(::prost::alloc::boxed::Box<super::LikeNode>),
642        #[prost(message, tag = "32")]
643        Ilike(::prost::alloc::boxed::Box<super::ILikeNode>),
644        #[prost(message, tag = "33")]
645        SimilarTo(::prost::alloc::boxed::Box<super::SimilarToNode>),
646        #[prost(message, tag = "34")]
647        Placeholder(super::PlaceholderNode),
648        #[prost(message, tag = "35")]
649        Unnest(super::Unnest),
650    }
651}
652#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
653pub struct Wildcard {
654    #[prost(message, optional, tag = "1")]
655    pub qualifier: ::core::option::Option<TableReference>,
656}
657#[derive(Clone, PartialEq, ::prost::Message)]
658pub struct PlaceholderNode {
659    #[prost(string, tag = "1")]
660    pub id: ::prost::alloc::string::String,
661    /// We serialize the data type, metadata, and nullability separately to maintain
662    /// compatibility with older versions
663    #[prost(message, optional, tag = "2")]
664    pub data_type: ::core::option::Option<super::datafusion_common::ArrowType>,
665    #[prost(bool, optional, tag = "3")]
666    pub nullable: ::core::option::Option<bool>,
667    #[prost(map = "string, string", tag = "4")]
668    pub metadata: ::std::collections::HashMap<
669        ::prost::alloc::string::String,
670        ::prost::alloc::string::String,
671    >,
672}
673#[derive(Clone, PartialEq, ::prost::Message)]
674pub struct LogicalExprList {
675    #[prost(message, repeated, tag = "1")]
676    pub expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
677}
678#[derive(Clone, PartialEq, ::prost::Message)]
679pub struct GroupingSetNode {
680    #[prost(message, repeated, tag = "1")]
681    pub expr: ::prost::alloc::vec::Vec<LogicalExprList>,
682}
683#[derive(Clone, PartialEq, ::prost::Message)]
684pub struct CubeNode {
685    #[prost(message, repeated, tag = "1")]
686    pub expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
687}
688#[derive(Clone, PartialEq, ::prost::Message)]
689pub struct RollupNode {
690    #[prost(message, repeated, tag = "1")]
691    pub expr: ::prost::alloc::vec::Vec<LogicalExprNode>,
692}
693#[derive(Clone, PartialEq, ::prost::Message)]
694pub struct NamedStructField {
695    #[prost(message, optional, tag = "1")]
696    pub name: ::core::option::Option<super::datafusion_common::ScalarValue>,
697}
698#[derive(Clone, PartialEq, ::prost::Message)]
699pub struct ListIndex {
700    #[prost(message, optional, tag = "1")]
701    pub key: ::core::option::Option<LogicalExprNode>,
702}
703#[derive(Clone, PartialEq, ::prost::Message)]
704pub struct ListRange {
705    #[prost(message, optional, tag = "1")]
706    pub start: ::core::option::Option<LogicalExprNode>,
707    #[prost(message, optional, tag = "2")]
708    pub stop: ::core::option::Option<LogicalExprNode>,
709    #[prost(message, optional, tag = "3")]
710    pub stride: ::core::option::Option<LogicalExprNode>,
711}
712#[derive(Clone, PartialEq, ::prost::Message)]
713pub struct IsNull {
714    #[prost(message, optional, boxed, tag = "1")]
715    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
716}
717#[derive(Clone, PartialEq, ::prost::Message)]
718pub struct IsNotNull {
719    #[prost(message, optional, boxed, tag = "1")]
720    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
721}
722#[derive(Clone, PartialEq, ::prost::Message)]
723pub struct IsTrue {
724    #[prost(message, optional, boxed, tag = "1")]
725    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
726}
727#[derive(Clone, PartialEq, ::prost::Message)]
728pub struct IsFalse {
729    #[prost(message, optional, boxed, tag = "1")]
730    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
731}
732#[derive(Clone, PartialEq, ::prost::Message)]
733pub struct IsUnknown {
734    #[prost(message, optional, boxed, tag = "1")]
735    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
736}
737#[derive(Clone, PartialEq, ::prost::Message)]
738pub struct IsNotTrue {
739    #[prost(message, optional, boxed, tag = "1")]
740    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
741}
742#[derive(Clone, PartialEq, ::prost::Message)]
743pub struct IsNotFalse {
744    #[prost(message, optional, boxed, tag = "1")]
745    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
746}
747#[derive(Clone, PartialEq, ::prost::Message)]
748pub struct IsNotUnknown {
749    #[prost(message, optional, boxed, tag = "1")]
750    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
751}
752#[derive(Clone, PartialEq, ::prost::Message)]
753pub struct Not {
754    #[prost(message, optional, boxed, tag = "1")]
755    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
756}
757#[derive(Clone, PartialEq, ::prost::Message)]
758pub struct AliasNode {
759    #[prost(message, optional, boxed, tag = "1")]
760    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
761    #[prost(string, tag = "2")]
762    pub alias: ::prost::alloc::string::String,
763    #[prost(message, repeated, tag = "3")]
764    pub relation: ::prost::alloc::vec::Vec<TableReference>,
765    #[prost(map = "string, string", tag = "4")]
766    pub metadata: ::std::collections::HashMap<
767        ::prost::alloc::string::String,
768        ::prost::alloc::string::String,
769    >,
770}
771#[derive(Clone, PartialEq, ::prost::Message)]
772pub struct BinaryExprNode {
773    /// Represents the operands from the left inner most expression
774    /// to the right outer most expression where each of them are chained
775    /// with the operator 'op'.
776    #[prost(message, repeated, tag = "1")]
777    pub operands: ::prost::alloc::vec::Vec<LogicalExprNode>,
778    #[prost(string, tag = "3")]
779    pub op: ::prost::alloc::string::String,
780}
781#[derive(Clone, PartialEq, ::prost::Message)]
782pub struct NegativeNode {
783    #[prost(message, optional, boxed, tag = "1")]
784    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
785}
786#[derive(Clone, PartialEq, ::prost::Message)]
787pub struct Unnest {
788    #[prost(message, repeated, tag = "1")]
789    pub exprs: ::prost::alloc::vec::Vec<LogicalExprNode>,
790}
791#[derive(Clone, PartialEq, ::prost::Message)]
792pub struct InListNode {
793    #[prost(message, optional, boxed, tag = "1")]
794    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
795    #[prost(message, repeated, tag = "2")]
796    pub list: ::prost::alloc::vec::Vec<LogicalExprNode>,
797    #[prost(bool, tag = "3")]
798    pub negated: bool,
799}
800#[derive(Clone, PartialEq, ::prost::Message)]
801pub struct AggregateUdfExprNode {
802    #[prost(string, tag = "1")]
803    pub fun_name: ::prost::alloc::string::String,
804    #[prost(message, repeated, tag = "2")]
805    pub args: ::prost::alloc::vec::Vec<LogicalExprNode>,
806    #[prost(bool, tag = "5")]
807    pub distinct: bool,
808    #[prost(message, optional, boxed, tag = "3")]
809    pub filter: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
810    #[prost(message, repeated, tag = "4")]
811    pub order_by: ::prost::alloc::vec::Vec<SortExprNode>,
812    #[prost(bytes = "vec", optional, tag = "6")]
813    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
814    #[prost(enumeration = "NullTreatment", optional, tag = "7")]
815    pub null_treatment: ::core::option::Option<i32>,
816}
817#[derive(Clone, PartialEq, ::prost::Message)]
818pub struct ScalarUdfExprNode {
819    #[prost(string, tag = "1")]
820    pub fun_name: ::prost::alloc::string::String,
821    #[prost(message, repeated, tag = "2")]
822    pub args: ::prost::alloc::vec::Vec<LogicalExprNode>,
823    #[prost(bytes = "vec", optional, tag = "3")]
824    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
825}
826#[derive(Clone, PartialEq, ::prost::Message)]
827pub struct WindowExprNode {
828    #[prost(message, repeated, tag = "4")]
829    pub exprs: ::prost::alloc::vec::Vec<LogicalExprNode>,
830    #[prost(message, repeated, tag = "5")]
831    pub partition_by: ::prost::alloc::vec::Vec<LogicalExprNode>,
832    #[prost(message, repeated, tag = "6")]
833    pub order_by: ::prost::alloc::vec::Vec<SortExprNode>,
834    /// repeated LogicalExprNode filter = 7;
835    #[prost(message, optional, tag = "8")]
836    pub window_frame: ::core::option::Option<WindowFrame>,
837    #[prost(bytes = "vec", optional, tag = "10")]
838    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
839    #[prost(enumeration = "NullTreatment", optional, tag = "11")]
840    pub null_treatment: ::core::option::Option<i32>,
841    #[prost(bool, tag = "12")]
842    pub distinct: bool,
843    #[prost(message, optional, boxed, tag = "13")]
844    pub filter: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
845    #[prost(oneof = "window_expr_node::WindowFunction", tags = "3, 9")]
846    pub window_function: ::core::option::Option<window_expr_node::WindowFunction>,
847}
848/// Nested message and enum types in `WindowExprNode`.
849pub mod window_expr_node {
850    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
851    pub enum WindowFunction {
852        /// BuiltInWindowFunction built_in_function = 2;
853        #[prost(string, tag = "3")]
854        Udaf(::prost::alloc::string::String),
855        #[prost(string, tag = "9")]
856        Udwf(::prost::alloc::string::String),
857    }
858}
859#[derive(Clone, PartialEq, ::prost::Message)]
860pub struct BetweenNode {
861    #[prost(message, optional, boxed, tag = "1")]
862    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
863    #[prost(bool, tag = "2")]
864    pub negated: bool,
865    #[prost(message, optional, boxed, tag = "3")]
866    pub low: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
867    #[prost(message, optional, boxed, tag = "4")]
868    pub high: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
869}
870#[derive(Clone, PartialEq, ::prost::Message)]
871pub struct LikeNode {
872    #[prost(bool, tag = "1")]
873    pub negated: bool,
874    #[prost(message, optional, boxed, tag = "2")]
875    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
876    #[prost(message, optional, boxed, tag = "3")]
877    pub pattern: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
878    #[prost(string, tag = "4")]
879    pub escape_char: ::prost::alloc::string::String,
880}
881#[derive(Clone, PartialEq, ::prost::Message)]
882pub struct ILikeNode {
883    #[prost(bool, tag = "1")]
884    pub negated: bool,
885    #[prost(message, optional, boxed, tag = "2")]
886    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
887    #[prost(message, optional, boxed, tag = "3")]
888    pub pattern: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
889    #[prost(string, tag = "4")]
890    pub escape_char: ::prost::alloc::string::String,
891}
892#[derive(Clone, PartialEq, ::prost::Message)]
893pub struct SimilarToNode {
894    #[prost(bool, tag = "1")]
895    pub negated: bool,
896    #[prost(message, optional, boxed, tag = "2")]
897    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
898    #[prost(message, optional, boxed, tag = "3")]
899    pub pattern: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
900    #[prost(string, tag = "4")]
901    pub escape_char: ::prost::alloc::string::String,
902}
903#[derive(Clone, PartialEq, ::prost::Message)]
904pub struct CaseNode {
905    #[prost(message, optional, boxed, tag = "1")]
906    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
907    #[prost(message, repeated, tag = "2")]
908    pub when_then_expr: ::prost::alloc::vec::Vec<WhenThen>,
909    #[prost(message, optional, boxed, tag = "3")]
910    pub else_expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
911}
912#[derive(Clone, PartialEq, ::prost::Message)]
913pub struct WhenThen {
914    #[prost(message, optional, tag = "1")]
915    pub when_expr: ::core::option::Option<LogicalExprNode>,
916    #[prost(message, optional, tag = "2")]
917    pub then_expr: ::core::option::Option<LogicalExprNode>,
918}
919#[derive(Clone, PartialEq, ::prost::Message)]
920pub struct CastNode {
921    #[prost(message, optional, boxed, tag = "1")]
922    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
923    #[prost(message, optional, tag = "2")]
924    pub arrow_type: ::core::option::Option<super::datafusion_common::ArrowType>,
925}
926#[derive(Clone, PartialEq, ::prost::Message)]
927pub struct TryCastNode {
928    #[prost(message, optional, boxed, tag = "1")]
929    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<LogicalExprNode>>,
930    #[prost(message, optional, tag = "2")]
931    pub arrow_type: ::core::option::Option<super::datafusion_common::ArrowType>,
932}
933#[derive(Clone, PartialEq, ::prost::Message)]
934pub struct SortExprNode {
935    #[prost(message, optional, tag = "1")]
936    pub expr: ::core::option::Option<LogicalExprNode>,
937    #[prost(bool, tag = "2")]
938    pub asc: bool,
939    #[prost(bool, tag = "3")]
940    pub nulls_first: bool,
941}
942#[derive(Clone, PartialEq, ::prost::Message)]
943pub struct WindowFrame {
944    #[prost(enumeration = "WindowFrameUnits", tag = "1")]
945    pub window_frame_units: i32,
946    #[prost(message, optional, tag = "2")]
947    pub start_bound: ::core::option::Option<WindowFrameBound>,
948    /// "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>)
949    /// 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>)
950    #[prost(oneof = "window_frame::EndBound", tags = "3")]
951    pub end_bound: ::core::option::Option<window_frame::EndBound>,
952}
953/// Nested message and enum types in `WindowFrame`.
954pub mod window_frame {
955    /// "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>)
956    /// 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>)
957    #[derive(Clone, PartialEq, ::prost::Oneof)]
958    pub enum EndBound {
959        #[prost(message, tag = "3")]
960        Bound(super::WindowFrameBound),
961    }
962}
963#[derive(Clone, PartialEq, ::prost::Message)]
964pub struct WindowFrameBound {
965    #[prost(enumeration = "WindowFrameBoundType", tag = "1")]
966    pub window_frame_bound_type: i32,
967    #[prost(message, optional, tag = "2")]
968    pub bound_value: ::core::option::Option<super::datafusion_common::ScalarValue>,
969}
970#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
971pub struct FixedSizeBinary {
972    #[prost(int32, tag = "1")]
973    pub length: i32,
974}
975#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
976pub struct AnalyzedLogicalPlanType {
977    #[prost(string, tag = "1")]
978    pub analyzer_name: ::prost::alloc::string::String,
979}
980#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
981pub struct OptimizedLogicalPlanType {
982    #[prost(string, tag = "1")]
983    pub optimizer_name: ::prost::alloc::string::String,
984}
985#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
986pub struct OptimizedPhysicalPlanType {
987    #[prost(string, tag = "1")]
988    pub optimizer_name: ::prost::alloc::string::String,
989}
990#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
991pub struct PlanType {
992    #[prost(
993        oneof = "plan_type::PlanTypeEnum",
994        tags = "1, 7, 8, 2, 3, 4, 9, 11, 5, 6, 10, 12, 13"
995    )]
996    pub plan_type_enum: ::core::option::Option<plan_type::PlanTypeEnum>,
997}
998/// Nested message and enum types in `PlanType`.
999pub mod plan_type {
1000    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1001    pub enum PlanTypeEnum {
1002        #[prost(message, tag = "1")]
1003        InitialLogicalPlan(super::super::datafusion_common::EmptyMessage),
1004        #[prost(message, tag = "7")]
1005        AnalyzedLogicalPlan(super::AnalyzedLogicalPlanType),
1006        #[prost(message, tag = "8")]
1007        FinalAnalyzedLogicalPlan(super::super::datafusion_common::EmptyMessage),
1008        #[prost(message, tag = "2")]
1009        OptimizedLogicalPlan(super::OptimizedLogicalPlanType),
1010        #[prost(message, tag = "3")]
1011        FinalLogicalPlan(super::super::datafusion_common::EmptyMessage),
1012        #[prost(message, tag = "4")]
1013        InitialPhysicalPlan(super::super::datafusion_common::EmptyMessage),
1014        #[prost(message, tag = "9")]
1015        InitialPhysicalPlanWithStats(super::super::datafusion_common::EmptyMessage),
1016        #[prost(message, tag = "11")]
1017        InitialPhysicalPlanWithSchema(super::super::datafusion_common::EmptyMessage),
1018        #[prost(message, tag = "5")]
1019        OptimizedPhysicalPlan(super::OptimizedPhysicalPlanType),
1020        #[prost(message, tag = "6")]
1021        FinalPhysicalPlan(super::super::datafusion_common::EmptyMessage),
1022        #[prost(message, tag = "10")]
1023        FinalPhysicalPlanWithStats(super::super::datafusion_common::EmptyMessage),
1024        #[prost(message, tag = "12")]
1025        FinalPhysicalPlanWithSchema(super::super::datafusion_common::EmptyMessage),
1026        #[prost(message, tag = "13")]
1027        PhysicalPlanError(super::super::datafusion_common::EmptyMessage),
1028    }
1029}
1030#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1031pub struct StringifiedPlan {
1032    #[prost(message, optional, tag = "1")]
1033    pub plan_type: ::core::option::Option<PlanType>,
1034    #[prost(string, tag = "2")]
1035    pub plan: ::prost::alloc::string::String,
1036}
1037#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1038pub struct BareTableReference {
1039    #[prost(string, tag = "1")]
1040    pub table: ::prost::alloc::string::String,
1041}
1042#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1043pub struct PartialTableReference {
1044    #[prost(string, tag = "1")]
1045    pub schema: ::prost::alloc::string::String,
1046    #[prost(string, tag = "2")]
1047    pub table: ::prost::alloc::string::String,
1048}
1049#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1050pub struct FullTableReference {
1051    #[prost(string, tag = "1")]
1052    pub catalog: ::prost::alloc::string::String,
1053    #[prost(string, tag = "2")]
1054    pub schema: ::prost::alloc::string::String,
1055    #[prost(string, tag = "3")]
1056    pub table: ::prost::alloc::string::String,
1057}
1058#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1059pub struct TableReference {
1060    #[prost(oneof = "table_reference::TableReferenceEnum", tags = "1, 2, 3")]
1061    pub table_reference_enum: ::core::option::Option<
1062        table_reference::TableReferenceEnum,
1063    >,
1064}
1065/// Nested message and enum types in `TableReference`.
1066pub mod table_reference {
1067    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1068    pub enum TableReferenceEnum {
1069        #[prost(message, tag = "1")]
1070        Bare(super::BareTableReference),
1071        #[prost(message, tag = "2")]
1072        Partial(super::PartialTableReference),
1073        #[prost(message, tag = "3")]
1074        Full(super::FullTableReference),
1075    }
1076}
1077/// PhysicalPlanNode is a nested type
1078#[derive(Clone, PartialEq, ::prost::Message)]
1079pub struct PhysicalPlanNode {
1080    #[prost(
1081        oneof = "physical_plan_node::PhysicalPlanType",
1082        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, 37, 38"
1083    )]
1084    pub physical_plan_type: ::core::option::Option<physical_plan_node::PhysicalPlanType>,
1085}
1086/// Nested message and enum types in `PhysicalPlanNode`.
1087pub mod physical_plan_node {
1088    #[derive(Clone, PartialEq, ::prost::Oneof)]
1089    pub enum PhysicalPlanType {
1090        #[prost(message, tag = "1")]
1091        ParquetScan(super::ParquetScanExecNode),
1092        #[prost(message, tag = "2")]
1093        CsvScan(super::CsvScanExecNode),
1094        #[prost(message, tag = "3")]
1095        Empty(super::EmptyExecNode),
1096        #[prost(message, tag = "4")]
1097        Projection(::prost::alloc::boxed::Box<super::ProjectionExecNode>),
1098        #[prost(message, tag = "6")]
1099        GlobalLimit(::prost::alloc::boxed::Box<super::GlobalLimitExecNode>),
1100        #[prost(message, tag = "7")]
1101        LocalLimit(::prost::alloc::boxed::Box<super::LocalLimitExecNode>),
1102        #[prost(message, tag = "8")]
1103        Aggregate(::prost::alloc::boxed::Box<super::AggregateExecNode>),
1104        #[prost(message, tag = "9")]
1105        HashJoin(::prost::alloc::boxed::Box<super::HashJoinExecNode>),
1106        #[prost(message, tag = "10")]
1107        Sort(::prost::alloc::boxed::Box<super::SortExecNode>),
1108        #[prost(message, tag = "11")]
1109        CoalesceBatches(::prost::alloc::boxed::Box<super::CoalesceBatchesExecNode>),
1110        #[prost(message, tag = "12")]
1111        Filter(::prost::alloc::boxed::Box<super::FilterExecNode>),
1112        #[prost(message, tag = "13")]
1113        Merge(::prost::alloc::boxed::Box<super::CoalescePartitionsExecNode>),
1114        #[prost(message, tag = "14")]
1115        Repartition(::prost::alloc::boxed::Box<super::RepartitionExecNode>),
1116        #[prost(message, tag = "15")]
1117        Window(::prost::alloc::boxed::Box<super::WindowAggExecNode>),
1118        #[prost(message, tag = "16")]
1119        CrossJoin(::prost::alloc::boxed::Box<super::CrossJoinExecNode>),
1120        #[prost(message, tag = "17")]
1121        AvroScan(super::AvroScanExecNode),
1122        #[prost(message, tag = "18")]
1123        Extension(super::PhysicalExtensionNode),
1124        #[prost(message, tag = "19")]
1125        Union(super::UnionExecNode),
1126        #[prost(message, tag = "20")]
1127        Explain(super::ExplainExecNode),
1128        #[prost(message, tag = "21")]
1129        SortPreservingMerge(
1130            ::prost::alloc::boxed::Box<super::SortPreservingMergeExecNode>,
1131        ),
1132        #[prost(message, tag = "22")]
1133        NestedLoopJoin(::prost::alloc::boxed::Box<super::NestedLoopJoinExecNode>),
1134        #[prost(message, tag = "23")]
1135        Analyze(::prost::alloc::boxed::Box<super::AnalyzeExecNode>),
1136        #[prost(message, tag = "24")]
1137        JsonSink(::prost::alloc::boxed::Box<super::JsonSinkExecNode>),
1138        #[prost(message, tag = "25")]
1139        SymmetricHashJoin(::prost::alloc::boxed::Box<super::SymmetricHashJoinExecNode>),
1140        #[prost(message, tag = "26")]
1141        Interleave(super::InterleaveExecNode),
1142        #[prost(message, tag = "27")]
1143        PlaceholderRow(super::PlaceholderRowExecNode),
1144        #[prost(message, tag = "28")]
1145        CsvSink(::prost::alloc::boxed::Box<super::CsvSinkExecNode>),
1146        #[prost(message, tag = "29")]
1147        ParquetSink(::prost::alloc::boxed::Box<super::ParquetSinkExecNode>),
1148        #[prost(message, tag = "30")]
1149        Unnest(::prost::alloc::boxed::Box<super::UnnestExecNode>),
1150        #[prost(message, tag = "31")]
1151        JsonScan(super::JsonScanExecNode),
1152        #[prost(message, tag = "32")]
1153        Cooperative(::prost::alloc::boxed::Box<super::CooperativeExecNode>),
1154        #[prost(message, tag = "33")]
1155        GenerateSeries(super::GenerateSeriesNode),
1156        #[prost(message, tag = "34")]
1157        SortMergeJoin(::prost::alloc::boxed::Box<super::SortMergeJoinExecNode>),
1158        #[prost(message, tag = "35")]
1159        MemoryScan(super::MemoryScanExecNode),
1160        #[prost(message, tag = "36")]
1161        AsyncFunc(::prost::alloc::boxed::Box<super::AsyncFuncExecNode>),
1162        #[prost(message, tag = "37")]
1163        Buffer(::prost::alloc::boxed::Box<super::BufferExecNode>),
1164        #[prost(message, tag = "38")]
1165        ArrowScan(super::ArrowScanExecNode),
1166    }
1167}
1168#[derive(Clone, PartialEq, ::prost::Message)]
1169pub struct PartitionColumn {
1170    #[prost(string, tag = "1")]
1171    pub name: ::prost::alloc::string::String,
1172    #[prost(message, optional, tag = "2")]
1173    pub arrow_type: ::core::option::Option<super::datafusion_common::ArrowType>,
1174}
1175#[derive(Clone, PartialEq, ::prost::Message)]
1176pub struct FileSinkConfig {
1177    #[prost(string, tag = "1")]
1178    pub object_store_url: ::prost::alloc::string::String,
1179    #[prost(message, repeated, tag = "2")]
1180    pub file_groups: ::prost::alloc::vec::Vec<PartitionedFile>,
1181    #[prost(string, repeated, tag = "3")]
1182    pub table_paths: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1183    #[prost(message, optional, tag = "4")]
1184    pub output_schema: ::core::option::Option<super::datafusion_common::Schema>,
1185    #[prost(message, repeated, tag = "5")]
1186    pub table_partition_cols: ::prost::alloc::vec::Vec<PartitionColumn>,
1187    #[prost(bool, tag = "9")]
1188    pub keep_partition_by_columns: bool,
1189    #[prost(enumeration = "InsertOp", tag = "10")]
1190    pub insert_op: i32,
1191    #[prost(string, tag = "11")]
1192    pub file_extension: ::prost::alloc::string::String,
1193    /// Determines how the output path is interpreted.
1194    #[prost(enumeration = "FileOutputMode", tag = "12")]
1195    pub file_output_mode: i32,
1196}
1197#[derive(Clone, PartialEq, ::prost::Message)]
1198pub struct JsonSink {
1199    #[prost(message, optional, tag = "1")]
1200    pub config: ::core::option::Option<FileSinkConfig>,
1201    #[prost(message, optional, tag = "2")]
1202    pub writer_options: ::core::option::Option<
1203        super::datafusion_common::JsonWriterOptions,
1204    >,
1205}
1206#[derive(Clone, PartialEq, ::prost::Message)]
1207pub struct JsonSinkExecNode {
1208    #[prost(message, optional, boxed, tag = "1")]
1209    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1210    #[prost(message, optional, tag = "2")]
1211    pub sink: ::core::option::Option<JsonSink>,
1212    #[prost(message, optional, tag = "3")]
1213    pub sink_schema: ::core::option::Option<super::datafusion_common::Schema>,
1214    #[prost(message, optional, tag = "4")]
1215    pub sort_order: ::core::option::Option<PhysicalSortExprNodeCollection>,
1216}
1217#[derive(Clone, PartialEq, ::prost::Message)]
1218pub struct CsvSink {
1219    #[prost(message, optional, tag = "1")]
1220    pub config: ::core::option::Option<FileSinkConfig>,
1221    #[prost(message, optional, tag = "2")]
1222    pub writer_options: ::core::option::Option<
1223        super::datafusion_common::CsvWriterOptions,
1224    >,
1225}
1226#[derive(Clone, PartialEq, ::prost::Message)]
1227pub struct CsvSinkExecNode {
1228    #[prost(message, optional, boxed, tag = "1")]
1229    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1230    #[prost(message, optional, tag = "2")]
1231    pub sink: ::core::option::Option<CsvSink>,
1232    #[prost(message, optional, tag = "3")]
1233    pub sink_schema: ::core::option::Option<super::datafusion_common::Schema>,
1234    #[prost(message, optional, tag = "4")]
1235    pub sort_order: ::core::option::Option<PhysicalSortExprNodeCollection>,
1236}
1237#[derive(Clone, PartialEq, ::prost::Message)]
1238pub struct ParquetSink {
1239    #[prost(message, optional, tag = "1")]
1240    pub config: ::core::option::Option<FileSinkConfig>,
1241    #[prost(message, optional, tag = "2")]
1242    pub parquet_options: ::core::option::Option<
1243        super::datafusion_common::TableParquetOptions,
1244    >,
1245}
1246#[derive(Clone, PartialEq, ::prost::Message)]
1247pub struct ParquetSinkExecNode {
1248    #[prost(message, optional, boxed, tag = "1")]
1249    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1250    #[prost(message, optional, tag = "2")]
1251    pub sink: ::core::option::Option<ParquetSink>,
1252    #[prost(message, optional, tag = "3")]
1253    pub sink_schema: ::core::option::Option<super::datafusion_common::Schema>,
1254    #[prost(message, optional, tag = "4")]
1255    pub sort_order: ::core::option::Option<PhysicalSortExprNodeCollection>,
1256}
1257#[derive(Clone, PartialEq, ::prost::Message)]
1258pub struct UnnestExecNode {
1259    #[prost(message, optional, boxed, tag = "1")]
1260    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1261    #[prost(message, optional, tag = "2")]
1262    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1263    #[prost(message, repeated, tag = "3")]
1264    pub list_type_columns: ::prost::alloc::vec::Vec<ListUnnest>,
1265    #[prost(uint64, repeated, tag = "4")]
1266    pub struct_type_columns: ::prost::alloc::vec::Vec<u64>,
1267    #[prost(message, optional, tag = "5")]
1268    pub options: ::core::option::Option<UnnestOptions>,
1269}
1270#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1271pub struct ListUnnest {
1272    #[prost(uint32, tag = "1")]
1273    pub index_in_input_schema: u32,
1274    #[prost(uint32, tag = "2")]
1275    pub depth: u32,
1276}
1277#[derive(Clone, PartialEq, ::prost::Message)]
1278pub struct PhysicalExtensionNode {
1279    #[prost(bytes = "vec", tag = "1")]
1280    pub node: ::prost::alloc::vec::Vec<u8>,
1281    #[prost(message, repeated, tag = "2")]
1282    pub inputs: ::prost::alloc::vec::Vec<PhysicalPlanNode>,
1283}
1284/// physical expressions
1285#[derive(Clone, PartialEq, ::prost::Message)]
1286pub struct PhysicalExprNode {
1287    /// Unique identifier for this expression to do deduplication during deserialization.
1288    /// When serializing, this is set to a unique identifier for each combination of
1289    /// expression, process and serialization run.
1290    /// When deserializing, if this ID has been seen before, the cached Arc is returned
1291    /// instead of creating a new one, enabling reconstruction of referential integrity
1292    /// across serde roundtrips.
1293    #[prost(uint64, optional, tag = "30")]
1294    pub expr_id: ::core::option::Option<u64>,
1295    #[prost(
1296        oneof = "physical_expr_node::ExprType",
1297        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21"
1298    )]
1299    pub expr_type: ::core::option::Option<physical_expr_node::ExprType>,
1300}
1301/// Nested message and enum types in `PhysicalExprNode`.
1302pub mod physical_expr_node {
1303    #[derive(Clone, PartialEq, ::prost::Oneof)]
1304    pub enum ExprType {
1305        /// column references
1306        #[prost(message, tag = "1")]
1307        Column(super::PhysicalColumn),
1308        #[prost(message, tag = "2")]
1309        Literal(super::super::datafusion_common::ScalarValue),
1310        /// binary expressions
1311        #[prost(message, tag = "3")]
1312        BinaryExpr(::prost::alloc::boxed::Box<super::PhysicalBinaryExprNode>),
1313        /// aggregate expressions
1314        #[prost(message, tag = "4")]
1315        AggregateExpr(super::PhysicalAggregateExprNode),
1316        /// null checks
1317        #[prost(message, tag = "5")]
1318        IsNullExpr(::prost::alloc::boxed::Box<super::PhysicalIsNull>),
1319        #[prost(message, tag = "6")]
1320        IsNotNullExpr(::prost::alloc::boxed::Box<super::PhysicalIsNotNull>),
1321        #[prost(message, tag = "7")]
1322        NotExpr(::prost::alloc::boxed::Box<super::PhysicalNot>),
1323        #[prost(message, tag = "8")]
1324        Case(::prost::alloc::boxed::Box<super::PhysicalCaseNode>),
1325        #[prost(message, tag = "9")]
1326        Cast(::prost::alloc::boxed::Box<super::PhysicalCastNode>),
1327        #[prost(message, tag = "10")]
1328        Sort(::prost::alloc::boxed::Box<super::PhysicalSortExprNode>),
1329        #[prost(message, tag = "11")]
1330        Negative(::prost::alloc::boxed::Box<super::PhysicalNegativeNode>),
1331        #[prost(message, tag = "12")]
1332        InList(::prost::alloc::boxed::Box<super::PhysicalInListNode>),
1333        ///   was PhysicalScalarFunctionNode scalar_function = 13;
1334        #[prost(message, tag = "14")]
1335        TryCast(::prost::alloc::boxed::Box<super::PhysicalTryCastNode>),
1336        /// window expressions
1337        #[prost(message, tag = "15")]
1338        WindowExpr(super::PhysicalWindowExprNode),
1339        /// was PhysicalDateTimeIntervalExprNode date_time_interval_expr = 17;
1340        #[prost(message, tag = "16")]
1341        ScalarUdf(super::PhysicalScalarUdfNode),
1342        #[prost(message, tag = "18")]
1343        LikeExpr(::prost::alloc::boxed::Box<super::PhysicalLikeExprNode>),
1344        #[prost(message, tag = "19")]
1345        Extension(super::PhysicalExtensionExprNode),
1346        #[prost(message, tag = "20")]
1347        UnknownColumn(super::UnknownColumn),
1348        #[prost(message, tag = "21")]
1349        HashExpr(super::PhysicalHashExprNode),
1350    }
1351}
1352#[derive(Clone, PartialEq, ::prost::Message)]
1353pub struct PhysicalScalarUdfNode {
1354    #[prost(string, tag = "1")]
1355    pub name: ::prost::alloc::string::String,
1356    #[prost(message, repeated, tag = "2")]
1357    pub args: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1358    #[prost(bytes = "vec", optional, tag = "3")]
1359    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1360    #[prost(message, optional, tag = "4")]
1361    pub return_type: ::core::option::Option<super::datafusion_common::ArrowType>,
1362    #[prost(bool, tag = "5")]
1363    pub nullable: bool,
1364    #[prost(string, tag = "6")]
1365    pub return_field_name: ::prost::alloc::string::String,
1366}
1367#[derive(Clone, PartialEq, ::prost::Message)]
1368pub struct PhysicalAggregateExprNode {
1369    #[prost(message, repeated, tag = "2")]
1370    pub expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1371    #[prost(message, repeated, tag = "5")]
1372    pub ordering_req: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1373    #[prost(bool, tag = "3")]
1374    pub distinct: bool,
1375    #[prost(bool, tag = "6")]
1376    pub ignore_nulls: bool,
1377    #[prost(bytes = "vec", optional, tag = "7")]
1378    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1379    #[prost(string, tag = "8")]
1380    pub human_display: ::prost::alloc::string::String,
1381    #[prost(oneof = "physical_aggregate_expr_node::AggregateFunction", tags = "4")]
1382    pub aggregate_function: ::core::option::Option<
1383        physical_aggregate_expr_node::AggregateFunction,
1384    >,
1385}
1386/// Nested message and enum types in `PhysicalAggregateExprNode`.
1387pub mod physical_aggregate_expr_node {
1388    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1389    pub enum AggregateFunction {
1390        #[prost(string, tag = "4")]
1391        UserDefinedAggrFunction(::prost::alloc::string::String),
1392    }
1393}
1394#[derive(Clone, PartialEq, ::prost::Message)]
1395pub struct PhysicalWindowExprNode {
1396    #[prost(message, repeated, tag = "4")]
1397    pub args: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1398    #[prost(message, repeated, tag = "5")]
1399    pub partition_by: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1400    #[prost(message, repeated, tag = "6")]
1401    pub order_by: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1402    #[prost(message, optional, tag = "7")]
1403    pub window_frame: ::core::option::Option<WindowFrame>,
1404    #[prost(string, tag = "8")]
1405    pub name: ::prost::alloc::string::String,
1406    #[prost(bytes = "vec", optional, tag = "9")]
1407    pub fun_definition: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1408    #[prost(bool, tag = "11")]
1409    pub ignore_nulls: bool,
1410    #[prost(bool, tag = "12")]
1411    pub distinct: bool,
1412    #[prost(oneof = "physical_window_expr_node::WindowFunction", tags = "3, 10")]
1413    pub window_function: ::core::option::Option<
1414        physical_window_expr_node::WindowFunction,
1415    >,
1416}
1417/// Nested message and enum types in `PhysicalWindowExprNode`.
1418pub mod physical_window_expr_node {
1419    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1420    pub enum WindowFunction {
1421        /// BuiltInWindowFunction built_in_function = 2;
1422        #[prost(string, tag = "3")]
1423        UserDefinedAggrFunction(::prost::alloc::string::String),
1424        #[prost(string, tag = "10")]
1425        UserDefinedWindowFunction(::prost::alloc::string::String),
1426    }
1427}
1428#[derive(Clone, PartialEq, ::prost::Message)]
1429pub struct PhysicalIsNull {
1430    #[prost(message, optional, boxed, tag = "1")]
1431    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1432}
1433#[derive(Clone, PartialEq, ::prost::Message)]
1434pub struct PhysicalIsNotNull {
1435    #[prost(message, optional, boxed, tag = "1")]
1436    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1437}
1438#[derive(Clone, PartialEq, ::prost::Message)]
1439pub struct PhysicalNot {
1440    #[prost(message, optional, boxed, tag = "1")]
1441    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1442}
1443#[derive(Clone, PartialEq, ::prost::Message)]
1444pub struct PhysicalAliasNode {
1445    #[prost(message, optional, tag = "1")]
1446    pub expr: ::core::option::Option<PhysicalExprNode>,
1447    #[prost(string, tag = "2")]
1448    pub alias: ::prost::alloc::string::String,
1449}
1450#[derive(Clone, PartialEq, ::prost::Message)]
1451pub struct PhysicalBinaryExprNode {
1452    #[prost(message, optional, boxed, tag = "1")]
1453    pub l: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1454    #[prost(message, optional, boxed, tag = "2")]
1455    pub r: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1456    #[prost(string, tag = "3")]
1457    pub op: ::prost::alloc::string::String,
1458}
1459#[derive(Clone, PartialEq, ::prost::Message)]
1460pub struct PhysicalDateTimeIntervalExprNode {
1461    #[prost(message, optional, tag = "1")]
1462    pub l: ::core::option::Option<PhysicalExprNode>,
1463    #[prost(message, optional, tag = "2")]
1464    pub r: ::core::option::Option<PhysicalExprNode>,
1465    #[prost(string, tag = "3")]
1466    pub op: ::prost::alloc::string::String,
1467}
1468#[derive(Clone, PartialEq, ::prost::Message)]
1469pub struct PhysicalLikeExprNode {
1470    #[prost(bool, tag = "1")]
1471    pub negated: bool,
1472    #[prost(bool, tag = "2")]
1473    pub case_insensitive: bool,
1474    #[prost(message, optional, boxed, tag = "3")]
1475    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1476    #[prost(message, optional, boxed, tag = "4")]
1477    pub pattern: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1478}
1479#[derive(Clone, PartialEq, ::prost::Message)]
1480pub struct PhysicalSortExprNode {
1481    #[prost(message, optional, boxed, tag = "1")]
1482    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1483    #[prost(bool, tag = "2")]
1484    pub asc: bool,
1485    #[prost(bool, tag = "3")]
1486    pub nulls_first: bool,
1487}
1488#[derive(Clone, PartialEq, ::prost::Message)]
1489pub struct PhysicalWhenThen {
1490    #[prost(message, optional, tag = "1")]
1491    pub when_expr: ::core::option::Option<PhysicalExprNode>,
1492    #[prost(message, optional, tag = "2")]
1493    pub then_expr: ::core::option::Option<PhysicalExprNode>,
1494}
1495#[derive(Clone, PartialEq, ::prost::Message)]
1496pub struct PhysicalInListNode {
1497    #[prost(message, optional, boxed, tag = "1")]
1498    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1499    #[prost(message, repeated, tag = "2")]
1500    pub list: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1501    #[prost(bool, tag = "3")]
1502    pub negated: bool,
1503}
1504#[derive(Clone, PartialEq, ::prost::Message)]
1505pub struct PhysicalCaseNode {
1506    #[prost(message, optional, boxed, tag = "1")]
1507    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1508    #[prost(message, repeated, tag = "2")]
1509    pub when_then_expr: ::prost::alloc::vec::Vec<PhysicalWhenThen>,
1510    #[prost(message, optional, boxed, tag = "3")]
1511    pub else_expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1512}
1513#[derive(Clone, PartialEq, ::prost::Message)]
1514pub struct PhysicalTryCastNode {
1515    #[prost(message, optional, boxed, tag = "1")]
1516    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1517    #[prost(message, optional, tag = "2")]
1518    pub arrow_type: ::core::option::Option<super::datafusion_common::ArrowType>,
1519}
1520#[derive(Clone, PartialEq, ::prost::Message)]
1521pub struct PhysicalCastNode {
1522    #[prost(message, optional, boxed, tag = "1")]
1523    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1524    #[prost(message, optional, tag = "2")]
1525    pub arrow_type: ::core::option::Option<super::datafusion_common::ArrowType>,
1526}
1527#[derive(Clone, PartialEq, ::prost::Message)]
1528pub struct PhysicalNegativeNode {
1529    #[prost(message, optional, boxed, tag = "1")]
1530    pub expr: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalExprNode>>,
1531}
1532#[derive(Clone, PartialEq, ::prost::Message)]
1533pub struct PhysicalExtensionExprNode {
1534    #[prost(bytes = "vec", tag = "1")]
1535    pub expr: ::prost::alloc::vec::Vec<u8>,
1536    #[prost(message, repeated, tag = "2")]
1537    pub inputs: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1538}
1539#[derive(Clone, PartialEq, ::prost::Message)]
1540pub struct PhysicalHashExprNode {
1541    #[prost(message, repeated, tag = "1")]
1542    pub on_columns: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1543    #[prost(uint64, tag = "2")]
1544    pub seed0: u64,
1545    #[prost(uint64, tag = "3")]
1546    pub seed1: u64,
1547    #[prost(uint64, tag = "4")]
1548    pub seed2: u64,
1549    #[prost(uint64, tag = "5")]
1550    pub seed3: u64,
1551    #[prost(string, tag = "6")]
1552    pub description: ::prost::alloc::string::String,
1553}
1554#[derive(Clone, PartialEq, ::prost::Message)]
1555pub struct FilterExecNode {
1556    #[prost(message, optional, boxed, tag = "1")]
1557    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1558    #[prost(message, optional, tag = "2")]
1559    pub expr: ::core::option::Option<PhysicalExprNode>,
1560    #[prost(uint32, tag = "3")]
1561    pub default_filter_selectivity: u32,
1562    #[prost(uint32, repeated, tag = "9")]
1563    pub projection: ::prost::alloc::vec::Vec<u32>,
1564    #[prost(uint32, tag = "10")]
1565    pub batch_size: u32,
1566    #[prost(uint32, optional, tag = "11")]
1567    pub fetch: ::core::option::Option<u32>,
1568}
1569#[derive(Clone, PartialEq, ::prost::Message)]
1570pub struct FileGroup {
1571    #[prost(message, repeated, tag = "1")]
1572    pub files: ::prost::alloc::vec::Vec<PartitionedFile>,
1573}
1574#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1575pub struct ScanLimit {
1576    /// wrap into a message to make it optional
1577    #[prost(uint32, tag = "1")]
1578    pub limit: u32,
1579}
1580#[derive(Clone, PartialEq, ::prost::Message)]
1581pub struct PhysicalSortExprNodeCollection {
1582    #[prost(message, repeated, tag = "1")]
1583    pub physical_sort_expr_nodes: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1584}
1585#[derive(Clone, PartialEq, ::prost::Message)]
1586pub struct ProjectionExpr {
1587    #[prost(string, tag = "1")]
1588    pub alias: ::prost::alloc::string::String,
1589    #[prost(message, optional, tag = "2")]
1590    pub expr: ::core::option::Option<PhysicalExprNode>,
1591}
1592#[derive(Clone, PartialEq, ::prost::Message)]
1593pub struct ProjectionExprs {
1594    #[prost(message, repeated, tag = "1")]
1595    pub projections: ::prost::alloc::vec::Vec<ProjectionExpr>,
1596}
1597#[derive(Clone, PartialEq, ::prost::Message)]
1598pub struct FileScanExecConf {
1599    #[prost(message, repeated, tag = "1")]
1600    pub file_groups: ::prost::alloc::vec::Vec<FileGroup>,
1601    #[prost(message, optional, tag = "2")]
1602    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1603    #[prost(uint32, repeated, tag = "4")]
1604    pub projection: ::prost::alloc::vec::Vec<u32>,
1605    #[prost(message, optional, tag = "5")]
1606    pub limit: ::core::option::Option<ScanLimit>,
1607    #[prost(message, optional, tag = "6")]
1608    pub statistics: ::core::option::Option<super::datafusion_common::Statistics>,
1609    #[prost(string, repeated, tag = "7")]
1610    pub table_partition_cols: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1611    #[prost(string, tag = "8")]
1612    pub object_store_url: ::prost::alloc::string::String,
1613    #[prost(message, repeated, tag = "9")]
1614    pub output_ordering: ::prost::alloc::vec::Vec<PhysicalSortExprNodeCollection>,
1615    #[prost(message, optional, tag = "11")]
1616    pub constraints: ::core::option::Option<super::datafusion_common::Constraints>,
1617    #[prost(uint64, optional, tag = "12")]
1618    pub batch_size: ::core::option::Option<u64>,
1619    #[prost(message, optional, tag = "13")]
1620    pub projection_exprs: ::core::option::Option<ProjectionExprs>,
1621}
1622#[derive(Clone, PartialEq, ::prost::Message)]
1623pub struct ParquetScanExecNode {
1624    #[prost(message, optional, tag = "1")]
1625    pub base_conf: ::core::option::Option<FileScanExecConf>,
1626    #[prost(message, optional, tag = "3")]
1627    pub predicate: ::core::option::Option<PhysicalExprNode>,
1628    #[prost(message, optional, tag = "4")]
1629    pub parquet_options: ::core::option::Option<
1630        super::datafusion_common::TableParquetOptions,
1631    >,
1632}
1633#[derive(Clone, PartialEq, ::prost::Message)]
1634pub struct CsvScanExecNode {
1635    #[prost(message, optional, tag = "1")]
1636    pub base_conf: ::core::option::Option<FileScanExecConf>,
1637    #[prost(bool, tag = "2")]
1638    pub has_header: bool,
1639    #[prost(string, tag = "3")]
1640    pub delimiter: ::prost::alloc::string::String,
1641    #[prost(string, tag = "4")]
1642    pub quote: ::prost::alloc::string::String,
1643    #[prost(bool, tag = "7")]
1644    pub newlines_in_values: bool,
1645    #[prost(bool, tag = "8")]
1646    pub truncate_rows: bool,
1647    #[prost(oneof = "csv_scan_exec_node::OptionalEscape", tags = "5")]
1648    pub optional_escape: ::core::option::Option<csv_scan_exec_node::OptionalEscape>,
1649    #[prost(oneof = "csv_scan_exec_node::OptionalComment", tags = "6")]
1650    pub optional_comment: ::core::option::Option<csv_scan_exec_node::OptionalComment>,
1651}
1652/// Nested message and enum types in `CsvScanExecNode`.
1653pub mod csv_scan_exec_node {
1654    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1655    pub enum OptionalEscape {
1656        #[prost(string, tag = "5")]
1657        Escape(::prost::alloc::string::String),
1658    }
1659    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1660    pub enum OptionalComment {
1661        #[prost(string, tag = "6")]
1662        Comment(::prost::alloc::string::String),
1663    }
1664}
1665#[derive(Clone, PartialEq, ::prost::Message)]
1666pub struct JsonScanExecNode {
1667    #[prost(message, optional, tag = "1")]
1668    pub base_conf: ::core::option::Option<FileScanExecConf>,
1669}
1670#[derive(Clone, PartialEq, ::prost::Message)]
1671pub struct AvroScanExecNode {
1672    #[prost(message, optional, tag = "1")]
1673    pub base_conf: ::core::option::Option<FileScanExecConf>,
1674}
1675#[derive(Clone, PartialEq, ::prost::Message)]
1676pub struct ArrowScanExecNode {
1677    #[prost(message, optional, tag = "1")]
1678    pub base_conf: ::core::option::Option<FileScanExecConf>,
1679}
1680#[derive(Clone, PartialEq, ::prost::Message)]
1681pub struct MemoryScanExecNode {
1682    #[prost(bytes = "vec", repeated, tag = "1")]
1683    pub partitions: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
1684    #[prost(message, optional, tag = "2")]
1685    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1686    #[prost(uint32, repeated, tag = "3")]
1687    pub projection: ::prost::alloc::vec::Vec<u32>,
1688    #[prost(message, repeated, tag = "4")]
1689    pub sort_information: ::prost::alloc::vec::Vec<PhysicalSortExprNodeCollection>,
1690    #[prost(bool, tag = "5")]
1691    pub show_sizes: bool,
1692    #[prost(uint32, optional, tag = "6")]
1693    pub fetch: ::core::option::Option<u32>,
1694}
1695#[derive(Clone, PartialEq, ::prost::Message)]
1696pub struct CooperativeExecNode {
1697    #[prost(message, optional, boxed, tag = "1")]
1698    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1699}
1700#[derive(Clone, PartialEq, ::prost::Message)]
1701pub struct HashJoinExecNode {
1702    #[prost(message, optional, boxed, tag = "1")]
1703    pub left: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1704    #[prost(message, optional, boxed, tag = "2")]
1705    pub right: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1706    #[prost(message, repeated, tag = "3")]
1707    pub on: ::prost::alloc::vec::Vec<JoinOn>,
1708    #[prost(enumeration = "super::datafusion_common::JoinType", tag = "4")]
1709    pub join_type: i32,
1710    #[prost(enumeration = "PartitionMode", tag = "6")]
1711    pub partition_mode: i32,
1712    #[prost(enumeration = "super::datafusion_common::NullEquality", tag = "7")]
1713    pub null_equality: i32,
1714    #[prost(message, optional, tag = "8")]
1715    pub filter: ::core::option::Option<JoinFilter>,
1716    #[prost(uint32, repeated, tag = "9")]
1717    pub projection: ::prost::alloc::vec::Vec<u32>,
1718    #[prost(bool, tag = "10")]
1719    pub null_aware: bool,
1720}
1721#[derive(Clone, PartialEq, ::prost::Message)]
1722pub struct SymmetricHashJoinExecNode {
1723    #[prost(message, optional, boxed, tag = "1")]
1724    pub left: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1725    #[prost(message, optional, boxed, tag = "2")]
1726    pub right: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1727    #[prost(message, repeated, tag = "3")]
1728    pub on: ::prost::alloc::vec::Vec<JoinOn>,
1729    #[prost(enumeration = "super::datafusion_common::JoinType", tag = "4")]
1730    pub join_type: i32,
1731    #[prost(enumeration = "StreamPartitionMode", tag = "6")]
1732    pub partition_mode: i32,
1733    #[prost(enumeration = "super::datafusion_common::NullEquality", tag = "7")]
1734    pub null_equality: i32,
1735    #[prost(message, optional, tag = "8")]
1736    pub filter: ::core::option::Option<JoinFilter>,
1737    #[prost(message, repeated, tag = "9")]
1738    pub left_sort_exprs: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1739    #[prost(message, repeated, tag = "10")]
1740    pub right_sort_exprs: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1741}
1742#[derive(Clone, PartialEq, ::prost::Message)]
1743pub struct InterleaveExecNode {
1744    #[prost(message, repeated, tag = "1")]
1745    pub inputs: ::prost::alloc::vec::Vec<PhysicalPlanNode>,
1746}
1747#[derive(Clone, PartialEq, ::prost::Message)]
1748pub struct UnionExecNode {
1749    #[prost(message, repeated, tag = "1")]
1750    pub inputs: ::prost::alloc::vec::Vec<PhysicalPlanNode>,
1751}
1752#[derive(Clone, PartialEq, ::prost::Message)]
1753pub struct ExplainExecNode {
1754    #[prost(message, optional, tag = "1")]
1755    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1756    #[prost(message, repeated, tag = "2")]
1757    pub stringified_plans: ::prost::alloc::vec::Vec<StringifiedPlan>,
1758    #[prost(bool, tag = "3")]
1759    pub verbose: bool,
1760}
1761#[derive(Clone, PartialEq, ::prost::Message)]
1762pub struct AnalyzeExecNode {
1763    #[prost(bool, tag = "1")]
1764    pub verbose: bool,
1765    #[prost(bool, tag = "2")]
1766    pub show_statistics: bool,
1767    #[prost(message, optional, boxed, tag = "3")]
1768    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1769    #[prost(message, optional, tag = "4")]
1770    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1771}
1772#[derive(Clone, PartialEq, ::prost::Message)]
1773pub struct CrossJoinExecNode {
1774    #[prost(message, optional, boxed, tag = "1")]
1775    pub left: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1776    #[prost(message, optional, boxed, tag = "2")]
1777    pub right: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1778}
1779#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1780pub struct PhysicalColumn {
1781    #[prost(string, tag = "1")]
1782    pub name: ::prost::alloc::string::String,
1783    #[prost(uint32, tag = "2")]
1784    pub index: u32,
1785}
1786#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1787pub struct UnknownColumn {
1788    #[prost(string, tag = "1")]
1789    pub name: ::prost::alloc::string::String,
1790}
1791#[derive(Clone, PartialEq, ::prost::Message)]
1792pub struct JoinOn {
1793    #[prost(message, optional, tag = "1")]
1794    pub left: ::core::option::Option<PhysicalExprNode>,
1795    #[prost(message, optional, tag = "2")]
1796    pub right: ::core::option::Option<PhysicalExprNode>,
1797}
1798#[derive(Clone, PartialEq, ::prost::Message)]
1799pub struct EmptyExecNode {
1800    #[prost(message, optional, tag = "1")]
1801    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1802}
1803#[derive(Clone, PartialEq, ::prost::Message)]
1804pub struct PlaceholderRowExecNode {
1805    #[prost(message, optional, tag = "1")]
1806    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
1807}
1808#[derive(Clone, PartialEq, ::prost::Message)]
1809pub struct ProjectionExecNode {
1810    #[prost(message, optional, boxed, tag = "1")]
1811    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1812    #[prost(message, repeated, tag = "2")]
1813    pub expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1814    #[prost(string, repeated, tag = "3")]
1815    pub expr_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1816}
1817#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1818pub struct PartiallySortedInputOrderMode {
1819    #[prost(uint64, repeated, tag = "6")]
1820    pub columns: ::prost::alloc::vec::Vec<u64>,
1821}
1822#[derive(Clone, PartialEq, ::prost::Message)]
1823pub struct WindowAggExecNode {
1824    #[prost(message, optional, boxed, tag = "1")]
1825    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1826    #[prost(message, repeated, tag = "2")]
1827    pub window_expr: ::prost::alloc::vec::Vec<PhysicalWindowExprNode>,
1828    #[prost(message, repeated, tag = "5")]
1829    pub partition_keys: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1830    /// Set optional to `None` for `BoundedWindowAggExec`.
1831    #[prost(oneof = "window_agg_exec_node::InputOrderMode", tags = "7, 8, 9")]
1832    pub input_order_mode: ::core::option::Option<window_agg_exec_node::InputOrderMode>,
1833}
1834/// Nested message and enum types in `WindowAggExecNode`.
1835pub mod window_agg_exec_node {
1836    /// Set optional to `None` for `BoundedWindowAggExec`.
1837    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1838    pub enum InputOrderMode {
1839        #[prost(message, tag = "7")]
1840        Linear(super::super::datafusion_common::EmptyMessage),
1841        #[prost(message, tag = "8")]
1842        PartiallySorted(super::PartiallySortedInputOrderMode),
1843        #[prost(message, tag = "9")]
1844        Sorted(super::super::datafusion_common::EmptyMessage),
1845    }
1846}
1847#[derive(Clone, PartialEq, ::prost::Message)]
1848pub struct MaybeFilter {
1849    #[prost(message, optional, tag = "1")]
1850    pub expr: ::core::option::Option<PhysicalExprNode>,
1851}
1852#[derive(Clone, PartialEq, ::prost::Message)]
1853pub struct MaybePhysicalSortExprs {
1854    #[prost(message, repeated, tag = "1")]
1855    pub sort_expr: ::prost::alloc::vec::Vec<PhysicalSortExprNode>,
1856}
1857#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1858pub struct AggLimit {
1859    /// wrap into a message to make it optional
1860    #[prost(uint64, tag = "1")]
1861    pub limit: u64,
1862    /// Optional ordering direction for TopK aggregation (true = descending, false = ascending)
1863    #[prost(bool, optional, tag = "2")]
1864    pub descending: ::core::option::Option<bool>,
1865}
1866#[derive(Clone, PartialEq, ::prost::Message)]
1867pub struct AggregateExecNode {
1868    #[prost(message, repeated, tag = "1")]
1869    pub group_expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1870    #[prost(message, repeated, tag = "2")]
1871    pub aggr_expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1872    #[prost(enumeration = "AggregateMode", tag = "3")]
1873    pub mode: i32,
1874    #[prost(message, optional, boxed, tag = "4")]
1875    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1876    #[prost(string, repeated, tag = "5")]
1877    pub group_expr_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1878    #[prost(string, repeated, tag = "6")]
1879    pub aggr_expr_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1880    /// we need the input schema to the partial aggregate to pass to the final aggregate
1881    #[prost(message, optional, tag = "7")]
1882    pub input_schema: ::core::option::Option<super::datafusion_common::Schema>,
1883    #[prost(message, repeated, tag = "8")]
1884    pub null_expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1885    #[prost(bool, repeated, tag = "9")]
1886    pub groups: ::prost::alloc::vec::Vec<bool>,
1887    #[prost(message, repeated, tag = "10")]
1888    pub filter_expr: ::prost::alloc::vec::Vec<MaybeFilter>,
1889    #[prost(message, optional, tag = "11")]
1890    pub limit: ::core::option::Option<AggLimit>,
1891    #[prost(bool, tag = "12")]
1892    pub has_grouping_set: bool,
1893}
1894#[derive(Clone, PartialEq, ::prost::Message)]
1895pub struct GlobalLimitExecNode {
1896    #[prost(message, optional, boxed, tag = "1")]
1897    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1898    /// The number of rows to skip before fetch
1899    #[prost(uint32, tag = "2")]
1900    pub skip: u32,
1901    /// Maximum number of rows to fetch; negative means no limit
1902    #[prost(int64, tag = "3")]
1903    pub fetch: i64,
1904}
1905#[derive(Clone, PartialEq, ::prost::Message)]
1906pub struct LocalLimitExecNode {
1907    #[prost(message, optional, boxed, tag = "1")]
1908    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1909    #[prost(uint32, tag = "2")]
1910    pub fetch: u32,
1911}
1912#[derive(Clone, PartialEq, ::prost::Message)]
1913pub struct SortExecNode {
1914    #[prost(message, optional, boxed, tag = "1")]
1915    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1916    #[prost(message, repeated, tag = "2")]
1917    pub expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1918    /// Maximum number of highest/lowest rows to fetch; negative means no limit
1919    #[prost(int64, tag = "3")]
1920    pub fetch: i64,
1921    #[prost(bool, tag = "4")]
1922    pub preserve_partitioning: bool,
1923}
1924#[derive(Clone, PartialEq, ::prost::Message)]
1925pub struct SortPreservingMergeExecNode {
1926    #[prost(message, optional, boxed, tag = "1")]
1927    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1928    #[prost(message, repeated, tag = "2")]
1929    pub expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1930    /// Maximum number of highest/lowest rows to fetch; negative means no limit
1931    #[prost(int64, tag = "3")]
1932    pub fetch: i64,
1933}
1934#[derive(Clone, PartialEq, ::prost::Message)]
1935pub struct NestedLoopJoinExecNode {
1936    #[prost(message, optional, boxed, tag = "1")]
1937    pub left: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1938    #[prost(message, optional, boxed, tag = "2")]
1939    pub right: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1940    #[prost(enumeration = "super::datafusion_common::JoinType", tag = "3")]
1941    pub join_type: i32,
1942    #[prost(message, optional, tag = "4")]
1943    pub filter: ::core::option::Option<JoinFilter>,
1944    #[prost(uint32, repeated, tag = "5")]
1945    pub projection: ::prost::alloc::vec::Vec<u32>,
1946}
1947#[derive(Clone, PartialEq, ::prost::Message)]
1948pub struct CoalesceBatchesExecNode {
1949    #[prost(message, optional, boxed, tag = "1")]
1950    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1951    #[prost(uint32, tag = "2")]
1952    pub target_batch_size: u32,
1953    #[prost(uint32, optional, tag = "3")]
1954    pub fetch: ::core::option::Option<u32>,
1955}
1956#[derive(Clone, PartialEq, ::prost::Message)]
1957pub struct CoalescePartitionsExecNode {
1958    #[prost(message, optional, boxed, tag = "1")]
1959    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1960    #[prost(uint32, optional, tag = "2")]
1961    pub fetch: ::core::option::Option<u32>,
1962}
1963#[derive(Clone, PartialEq, ::prost::Message)]
1964pub struct PhysicalHashRepartition {
1965    #[prost(message, repeated, tag = "1")]
1966    pub hash_expr: ::prost::alloc::vec::Vec<PhysicalExprNode>,
1967    #[prost(uint64, tag = "2")]
1968    pub partition_count: u64,
1969}
1970#[derive(Clone, PartialEq, ::prost::Message)]
1971pub struct RepartitionExecNode {
1972    #[prost(message, optional, boxed, tag = "1")]
1973    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
1974    /// oneof partition_method {
1975    ///    uint64 round_robin = 2;
1976    ///    PhysicalHashRepartition hash = 3;
1977    ///    uint64 unknown = 4;
1978    /// }
1979    #[prost(message, optional, tag = "5")]
1980    pub partitioning: ::core::option::Option<Partitioning>,
1981}
1982#[derive(Clone, PartialEq, ::prost::Message)]
1983pub struct Partitioning {
1984    #[prost(oneof = "partitioning::PartitionMethod", tags = "1, 2, 3")]
1985    pub partition_method: ::core::option::Option<partitioning::PartitionMethod>,
1986}
1987/// Nested message and enum types in `Partitioning`.
1988pub mod partitioning {
1989    #[derive(Clone, PartialEq, ::prost::Oneof)]
1990    pub enum PartitionMethod {
1991        #[prost(uint64, tag = "1")]
1992        RoundRobin(u64),
1993        #[prost(message, tag = "2")]
1994        Hash(super::PhysicalHashRepartition),
1995        #[prost(uint64, tag = "3")]
1996        Unknown(u64),
1997    }
1998}
1999#[derive(Clone, PartialEq, ::prost::Message)]
2000pub struct JoinFilter {
2001    #[prost(message, optional, tag = "1")]
2002    pub expression: ::core::option::Option<PhysicalExprNode>,
2003    #[prost(message, repeated, tag = "2")]
2004    pub column_indices: ::prost::alloc::vec::Vec<ColumnIndex>,
2005    #[prost(message, optional, tag = "3")]
2006    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
2007}
2008#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2009pub struct ColumnIndex {
2010    #[prost(uint32, tag = "1")]
2011    pub index: u32,
2012    #[prost(enumeration = "super::datafusion_common::JoinSide", tag = "2")]
2013    pub side: i32,
2014}
2015#[derive(Clone, PartialEq, ::prost::Message)]
2016pub struct PartitionedFile {
2017    #[prost(string, tag = "1")]
2018    pub path: ::prost::alloc::string::String,
2019    #[prost(uint64, tag = "2")]
2020    pub size: u64,
2021    #[prost(uint64, tag = "3")]
2022    pub last_modified_ns: u64,
2023    #[prost(message, repeated, tag = "4")]
2024    pub partition_values: ::prost::alloc::vec::Vec<
2025        super::datafusion_common::ScalarValue,
2026    >,
2027    #[prost(message, optional, tag = "5")]
2028    pub range: ::core::option::Option<FileRange>,
2029    #[prost(message, optional, tag = "6")]
2030    pub statistics: ::core::option::Option<super::datafusion_common::Statistics>,
2031}
2032#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2033pub struct FileRange {
2034    #[prost(int64, tag = "1")]
2035    pub start: i64,
2036    #[prost(int64, tag = "2")]
2037    pub end: i64,
2038}
2039#[derive(Clone, PartialEq, ::prost::Message)]
2040pub struct PartitionStats {
2041    #[prost(int64, tag = "1")]
2042    pub num_rows: i64,
2043    #[prost(int64, tag = "2")]
2044    pub num_batches: i64,
2045    #[prost(int64, tag = "3")]
2046    pub num_bytes: i64,
2047    #[prost(message, repeated, tag = "4")]
2048    pub column_stats: ::prost::alloc::vec::Vec<super::datafusion_common::ColumnStats>,
2049}
2050#[derive(Clone, PartialEq, ::prost::Message)]
2051pub struct RecursiveQueryNode {
2052    #[prost(string, tag = "1")]
2053    pub name: ::prost::alloc::string::String,
2054    #[prost(message, optional, boxed, tag = "2")]
2055    pub static_term: ::core::option::Option<::prost::alloc::boxed::Box<LogicalPlanNode>>,
2056    #[prost(message, optional, boxed, tag = "3")]
2057    pub recursive_term: ::core::option::Option<
2058        ::prost::alloc::boxed::Box<LogicalPlanNode>,
2059    >,
2060    #[prost(bool, tag = "4")]
2061    pub is_distinct: bool,
2062}
2063#[derive(Clone, PartialEq, ::prost::Message)]
2064pub struct CteWorkTableScanNode {
2065    #[prost(string, tag = "1")]
2066    pub name: ::prost::alloc::string::String,
2067    #[prost(message, optional, tag = "2")]
2068    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
2069}
2070#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2071pub struct GenerateSeriesArgsContainsNull {
2072    #[prost(enumeration = "GenerateSeriesName", tag = "1")]
2073    pub name: i32,
2074}
2075#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2076pub struct GenerateSeriesArgsInt64 {
2077    #[prost(int64, tag = "1")]
2078    pub start: i64,
2079    #[prost(int64, tag = "2")]
2080    pub end: i64,
2081    #[prost(int64, tag = "3")]
2082    pub step: i64,
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, Eq, Hash, ::prost::Message)]
2089pub struct GenerateSeriesArgsTimestamp {
2090    #[prost(int64, tag = "1")]
2091    pub start: i64,
2092    #[prost(int64, tag = "2")]
2093    pub end: i64,
2094    #[prost(message, optional, tag = "3")]
2095    pub step: ::core::option::Option<
2096        super::datafusion_common::IntervalMonthDayNanoValue,
2097    >,
2098    #[prost(string, optional, tag = "4")]
2099    pub tz: ::core::option::Option<::prost::alloc::string::String>,
2100    #[prost(bool, tag = "5")]
2101    pub include_end: bool,
2102    #[prost(enumeration = "GenerateSeriesName", tag = "6")]
2103    pub name: i32,
2104}
2105#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2106pub struct GenerateSeriesArgsDate {
2107    #[prost(int64, tag = "1")]
2108    pub start: i64,
2109    #[prost(int64, tag = "2")]
2110    pub end: i64,
2111    #[prost(message, optional, tag = "3")]
2112    pub step: ::core::option::Option<
2113        super::datafusion_common::IntervalMonthDayNanoValue,
2114    >,
2115    #[prost(bool, tag = "4")]
2116    pub include_end: bool,
2117    #[prost(enumeration = "GenerateSeriesName", tag = "5")]
2118    pub name: i32,
2119}
2120#[derive(Clone, PartialEq, ::prost::Message)]
2121pub struct GenerateSeriesNode {
2122    #[prost(message, optional, tag = "1")]
2123    pub schema: ::core::option::Option<super::datafusion_common::Schema>,
2124    #[prost(uint32, tag = "2")]
2125    pub target_batch_size: u32,
2126    #[prost(oneof = "generate_series_node::Args", tags = "3, 4, 5, 6")]
2127    pub args: ::core::option::Option<generate_series_node::Args>,
2128}
2129/// Nested message and enum types in `GenerateSeriesNode`.
2130pub mod generate_series_node {
2131    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
2132    pub enum Args {
2133        #[prost(message, tag = "3")]
2134        ContainsNull(super::GenerateSeriesArgsContainsNull),
2135        #[prost(message, tag = "4")]
2136        Int64Args(super::GenerateSeriesArgsInt64),
2137        #[prost(message, tag = "5")]
2138        TimestampArgs(super::GenerateSeriesArgsTimestamp),
2139        #[prost(message, tag = "6")]
2140        DateArgs(super::GenerateSeriesArgsDate),
2141    }
2142}
2143#[derive(Clone, PartialEq, ::prost::Message)]
2144pub struct SortMergeJoinExecNode {
2145    #[prost(message, optional, boxed, tag = "1")]
2146    pub left: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
2147    #[prost(message, optional, boxed, tag = "2")]
2148    pub right: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
2149    #[prost(message, repeated, tag = "3")]
2150    pub on: ::prost::alloc::vec::Vec<JoinOn>,
2151    #[prost(enumeration = "super::datafusion_common::JoinType", tag = "4")]
2152    pub join_type: i32,
2153    #[prost(message, optional, tag = "5")]
2154    pub filter: ::core::option::Option<JoinFilter>,
2155    #[prost(message, repeated, tag = "6")]
2156    pub sort_options: ::prost::alloc::vec::Vec<SortExprNode>,
2157    #[prost(enumeration = "super::datafusion_common::NullEquality", tag = "7")]
2158    pub null_equality: i32,
2159}
2160#[derive(Clone, PartialEq, ::prost::Message)]
2161pub struct AsyncFuncExecNode {
2162    #[prost(message, optional, boxed, tag = "1")]
2163    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
2164    #[prost(message, repeated, tag = "2")]
2165    pub async_exprs: ::prost::alloc::vec::Vec<PhysicalExprNode>,
2166    #[prost(string, repeated, tag = "3")]
2167    pub async_expr_names: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2168}
2169#[derive(Clone, PartialEq, ::prost::Message)]
2170pub struct BufferExecNode {
2171    #[prost(message, optional, boxed, tag = "1")]
2172    pub input: ::core::option::Option<::prost::alloc::boxed::Box<PhysicalPlanNode>>,
2173    #[prost(uint64, tag = "2")]
2174    pub capacity: u64,
2175}
2176#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2177#[repr(i32)]
2178pub enum WindowFrameUnits {
2179    Rows = 0,
2180    Range = 1,
2181    Groups = 2,
2182}
2183impl WindowFrameUnits {
2184    /// String value of the enum field names used in the ProtoBuf definition.
2185    ///
2186    /// The values are not transformed in any way and thus are considered stable
2187    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2188    pub fn as_str_name(&self) -> &'static str {
2189        match self {
2190            Self::Rows => "ROWS",
2191            Self::Range => "RANGE",
2192            Self::Groups => "GROUPS",
2193        }
2194    }
2195    /// Creates an enum from field names used in the ProtoBuf definition.
2196    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2197        match value {
2198            "ROWS" => Some(Self::Rows),
2199            "RANGE" => Some(Self::Range),
2200            "GROUPS" => Some(Self::Groups),
2201            _ => None,
2202        }
2203    }
2204}
2205#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2206#[repr(i32)]
2207pub enum WindowFrameBoundType {
2208    CurrentRow = 0,
2209    Preceding = 1,
2210    Following = 2,
2211}
2212impl WindowFrameBoundType {
2213    /// String value of the enum field names used in the ProtoBuf definition.
2214    ///
2215    /// The values are not transformed in any way and thus are considered stable
2216    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2217    pub fn as_str_name(&self) -> &'static str {
2218        match self {
2219            Self::CurrentRow => "CURRENT_ROW",
2220            Self::Preceding => "PRECEDING",
2221            Self::Following => "FOLLOWING",
2222        }
2223    }
2224    /// Creates an enum from field names used in the ProtoBuf definition.
2225    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2226        match value {
2227            "CURRENT_ROW" => Some(Self::CurrentRow),
2228            "PRECEDING" => Some(Self::Preceding),
2229            "FOLLOWING" => Some(Self::Following),
2230            _ => None,
2231        }
2232    }
2233}
2234#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2235#[repr(i32)]
2236pub enum NullTreatment {
2237    RespectNulls = 0,
2238    IgnoreNulls = 1,
2239}
2240impl NullTreatment {
2241    /// String value of the enum field names used in the ProtoBuf definition.
2242    ///
2243    /// The values are not transformed in any way and thus are considered stable
2244    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2245    pub fn as_str_name(&self) -> &'static str {
2246        match self {
2247            Self::RespectNulls => "RESPECT_NULLS",
2248            Self::IgnoreNulls => "IGNORE_NULLS",
2249        }
2250    }
2251    /// Creates an enum from field names used in the ProtoBuf definition.
2252    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2253        match value {
2254            "RESPECT_NULLS" => Some(Self::RespectNulls),
2255            "IGNORE_NULLS" => Some(Self::IgnoreNulls),
2256            _ => None,
2257        }
2258    }
2259}
2260#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2261#[repr(i32)]
2262pub enum DateUnit {
2263    Day = 0,
2264    DateMillisecond = 1,
2265}
2266impl DateUnit {
2267    /// String value of the enum field names used in the ProtoBuf definition.
2268    ///
2269    /// The values are not transformed in any way and thus are considered stable
2270    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2271    pub fn as_str_name(&self) -> &'static str {
2272        match self {
2273            Self::Day => "Day",
2274            Self::DateMillisecond => "DateMillisecond",
2275        }
2276    }
2277    /// Creates an enum from field names used in the ProtoBuf definition.
2278    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2279        match value {
2280            "Day" => Some(Self::Day),
2281            "DateMillisecond" => Some(Self::DateMillisecond),
2282            _ => None,
2283        }
2284    }
2285}
2286/// Determines how file sink output paths are interpreted.
2287#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2288#[repr(i32)]
2289pub enum FileOutputMode {
2290    /// Infer output mode from the URL (extension/trailing `/` heuristic).
2291    Automatic = 0,
2292    /// Write to a single file at the exact output path.
2293    SingleFile = 1,
2294    /// Write to a directory with generated filenames.
2295    Directory = 2,
2296}
2297impl FileOutputMode {
2298    /// String value of the enum field names used in the ProtoBuf definition.
2299    ///
2300    /// The values are not transformed in any way and thus are considered stable
2301    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2302    pub fn as_str_name(&self) -> &'static str {
2303        match self {
2304            Self::Automatic => "FILE_OUTPUT_MODE_AUTOMATIC",
2305            Self::SingleFile => "FILE_OUTPUT_MODE_SINGLE_FILE",
2306            Self::Directory => "FILE_OUTPUT_MODE_DIRECTORY",
2307        }
2308    }
2309    /// Creates an enum from field names used in the ProtoBuf definition.
2310    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2311        match value {
2312            "FILE_OUTPUT_MODE_AUTOMATIC" => Some(Self::Automatic),
2313            "FILE_OUTPUT_MODE_SINGLE_FILE" => Some(Self::SingleFile),
2314            "FILE_OUTPUT_MODE_DIRECTORY" => Some(Self::Directory),
2315            _ => None,
2316        }
2317    }
2318}
2319#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2320#[repr(i32)]
2321pub enum InsertOp {
2322    Append = 0,
2323    Overwrite = 1,
2324    Replace = 2,
2325}
2326impl InsertOp {
2327    /// String value of the enum field names used in the ProtoBuf definition.
2328    ///
2329    /// The values are not transformed in any way and thus are considered stable
2330    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2331    pub fn as_str_name(&self) -> &'static str {
2332        match self {
2333            Self::Append => "Append",
2334            Self::Overwrite => "Overwrite",
2335            Self::Replace => "Replace",
2336        }
2337    }
2338    /// Creates an enum from field names used in the ProtoBuf definition.
2339    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2340        match value {
2341            "Append" => Some(Self::Append),
2342            "Overwrite" => Some(Self::Overwrite),
2343            "Replace" => Some(Self::Replace),
2344            _ => None,
2345        }
2346    }
2347}
2348#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2349#[repr(i32)]
2350pub enum PartitionMode {
2351    CollectLeft = 0,
2352    Partitioned = 1,
2353    Auto = 2,
2354}
2355impl PartitionMode {
2356    /// String value of the enum field names used in the ProtoBuf definition.
2357    ///
2358    /// The values are not transformed in any way and thus are considered stable
2359    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2360    pub fn as_str_name(&self) -> &'static str {
2361        match self {
2362            Self::CollectLeft => "COLLECT_LEFT",
2363            Self::Partitioned => "PARTITIONED",
2364            Self::Auto => "AUTO",
2365        }
2366    }
2367    /// Creates an enum from field names used in the ProtoBuf definition.
2368    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2369        match value {
2370            "COLLECT_LEFT" => Some(Self::CollectLeft),
2371            "PARTITIONED" => Some(Self::Partitioned),
2372            "AUTO" => Some(Self::Auto),
2373            _ => None,
2374        }
2375    }
2376}
2377#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2378#[repr(i32)]
2379pub enum StreamPartitionMode {
2380    SinglePartition = 0,
2381    PartitionedExec = 1,
2382}
2383impl StreamPartitionMode {
2384    /// String value of the enum field names used in the ProtoBuf definition.
2385    ///
2386    /// The values are not transformed in any way and thus are considered stable
2387    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2388    pub fn as_str_name(&self) -> &'static str {
2389        match self {
2390            Self::SinglePartition => "SINGLE_PARTITION",
2391            Self::PartitionedExec => "PARTITIONED_EXEC",
2392        }
2393    }
2394    /// Creates an enum from field names used in the ProtoBuf definition.
2395    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2396        match value {
2397            "SINGLE_PARTITION" => Some(Self::SinglePartition),
2398            "PARTITIONED_EXEC" => Some(Self::PartitionedExec),
2399            _ => None,
2400        }
2401    }
2402}
2403#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2404#[repr(i32)]
2405pub enum AggregateMode {
2406    Partial = 0,
2407    Final = 1,
2408    FinalPartitioned = 2,
2409    Single = 3,
2410    SinglePartitioned = 4,
2411    PartialReduce = 5,
2412}
2413impl AggregateMode {
2414    /// String value of the enum field names used in the ProtoBuf definition.
2415    ///
2416    /// The values are not transformed in any way and thus are considered stable
2417    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2418    pub fn as_str_name(&self) -> &'static str {
2419        match self {
2420            Self::Partial => "PARTIAL",
2421            Self::Final => "FINAL",
2422            Self::FinalPartitioned => "FINAL_PARTITIONED",
2423            Self::Single => "SINGLE",
2424            Self::SinglePartitioned => "SINGLE_PARTITIONED",
2425            Self::PartialReduce => "PARTIAL_REDUCE",
2426        }
2427    }
2428    /// Creates an enum from field names used in the ProtoBuf definition.
2429    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2430        match value {
2431            "PARTIAL" => Some(Self::Partial),
2432            "FINAL" => Some(Self::Final),
2433            "FINAL_PARTITIONED" => Some(Self::FinalPartitioned),
2434            "SINGLE" => Some(Self::Single),
2435            "SINGLE_PARTITIONED" => Some(Self::SinglePartitioned),
2436            "PARTIAL_REDUCE" => Some(Self::PartialReduce),
2437            _ => None,
2438        }
2439    }
2440}
2441#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2442#[repr(i32)]
2443pub enum GenerateSeriesName {
2444    GsGenerateSeries = 0,
2445    GsRange = 1,
2446}
2447impl GenerateSeriesName {
2448    /// String value of the enum field names used in the ProtoBuf definition.
2449    ///
2450    /// The values are not transformed in any way and thus are considered stable
2451    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2452    pub fn as_str_name(&self) -> &'static str {
2453        match self {
2454            Self::GsGenerateSeries => "GS_GENERATE_SERIES",
2455            Self::GsRange => "GS_RANGE",
2456        }
2457    }
2458    /// Creates an enum from field names used in the ProtoBuf definition.
2459    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2460        match value {
2461            "GS_GENERATE_SERIES" => Some(Self::GsGenerateSeries),
2462            "GS_RANGE" => Some(Self::GsRange),
2463            _ => None,
2464        }
2465    }
2466}