datafusion_proto/generated/
prost.rs

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