Skip to main content

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