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