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