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