Skip to main content

datafusion_proto/generated/
prost.rs

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