Skip to main content

risingwave_pb/
batch_plan.rs

1// This file is @generated by prost-build.
2#[derive(prost_helpers::AnyPB)]
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct RowSeqScanNode {
5    #[prost(message, optional, tag = "1")]
6    pub table_desc: ::core::option::Option<super::plan_common::StorageTableDesc>,
7    #[prost(int32, repeated, tag = "2")]
8    pub column_ids: ::prost::alloc::vec::Vec<i32>,
9    /// All the ranges need to be read. i.e., they are OR'ed.
10    ///
11    /// Empty `scan_ranges` means full table scan.
12    #[prost(message, repeated, tag = "3")]
13    pub scan_ranges: ::prost::alloc::vec::Vec<ScanRange>,
14    /// The partition to read for scan tasks.
15    ///
16    /// Will be filled by the scheduler.
17    #[prost(message, optional, tag = "4")]
18    pub vnode_bitmap: ::core::option::Option<super::common::Buffer>,
19    /// Whether the order on output columns should be preserved.
20    #[prost(bool, tag = "5")]
21    pub ordered: bool,
22    /// The pushed down `batch_limit`. Max rows needed to return.
23    #[prost(uint64, optional, tag = "6")]
24    pub limit: ::core::option::Option<u64>,
25    #[prost(message, optional, tag = "7")]
26    pub query_epoch: ::core::option::Option<super::common::BatchQueryEpoch>,
27}
28#[derive(prost_helpers::AnyPB)]
29#[derive(Clone, PartialEq, ::prost::Message)]
30pub struct SysRowSeqScanNode {
31    #[prost(uint32, tag = "1", wrapper = "crate::id::TableId")]
32    pub table_id: crate::id::TableId,
33    #[prost(message, repeated, tag = "2")]
34    pub column_descs: ::prost::alloc::vec::Vec<super::plan_common::ColumnDesc>,
35}
36/// The range to scan, which specifies a consecutive range of the PK
37/// and can represent: (Suppose there are N columns in the PK)
38///
39/// * full table scan: Should not occur. Use an empty `Vec<ScanRange>` instead.
40/// * index range scan: `eq_conds` includes i (between 0 and N-1, inclusive) values,
41///   and `lower_bound` & `upper_bound` is the range for the (i+1)th column
42/// * index point get: `eq_conds` includes N values, and `lower_bound` & `upper_bound` are `None`
43#[derive(prost_helpers::AnyPB)]
44#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
45pub struct ScanRange {
46    /// The i-th element represents the value of the i-th PK column.
47    #[prost(bytes = "vec", repeated, tag = "1")]
48    pub eq_conds: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
49    /// The lower bound of the next PK column subsequent to those in `eq_conds`.
50    #[prost(message, optional, tag = "2")]
51    pub lower_bound: ::core::option::Option<scan_range::Bound>,
52    /// The upper bound of the next PK column subsequent to those in `eq_conds`.
53    #[prost(message, optional, tag = "3")]
54    pub upper_bound: ::core::option::Option<scan_range::Bound>,
55}
56/// Nested message and enum types in `ScanRange`.
57pub mod scan_range {
58    /// `None` represent unbounded.
59    #[derive(prost_helpers::AnyPB)]
60    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
61    pub struct Bound {
62        #[prost(bytes = "vec", repeated, tag = "1")]
63        pub value: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
64        #[prost(bool, tag = "2")]
65        pub inclusive: bool,
66    }
67}
68#[derive(prost_helpers::AnyPB)]
69#[derive(Clone, PartialEq, ::prost::Message)]
70pub struct SourceNode {
71    #[prost(uint32, tag = "1", wrapper = "crate::id::SourceId")]
72    pub source_id: crate::id::SourceId,
73    #[prost(message, repeated, tag = "2")]
74    pub columns: ::prost::alloc::vec::Vec<super::plan_common::ColumnCatalog>,
75    #[prost(btree_map = "string, string", tag = "3")]
76    pub with_properties: ::prost::alloc::collections::BTreeMap<
77        ::prost::alloc::string::String,
78        ::prost::alloc::string::String,
79    >,
80    #[prost(bytes = "vec", repeated, tag = "4")]
81    pub split: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
82    #[prost(message, optional, tag = "5")]
83    pub info: ::core::option::Option<super::catalog::StreamSourceInfo>,
84    #[prost(btree_map = "string, message", tag = "6")]
85    pub secret_refs: ::prost::alloc::collections::BTreeMap<
86        ::prost::alloc::string::String,
87        super::secret::SecretRef,
88    >,
89}
90#[derive(prost_helpers::AnyPB)]
91#[derive(Clone, PartialEq, ::prost::Message)]
92pub struct IcebergScanNode {
93    #[prost(message, repeated, tag = "1")]
94    pub columns: ::prost::alloc::vec::Vec<super::plan_common::ColumnCatalog>,
95    #[prost(btree_map = "string, string", tag = "2")]
96    pub with_properties: ::prost::alloc::collections::BTreeMap<
97        ::prost::alloc::string::String,
98        ::prost::alloc::string::String,
99    >,
100    #[prost(bytes = "vec", repeated, tag = "3")]
101    pub split: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
102    #[prost(btree_map = "string, message", tag = "4")]
103    pub secret_refs: ::prost::alloc::collections::BTreeMap<
104        ::prost::alloc::string::String,
105        super::secret::SecretRef,
106    >,
107    #[prost(enumeration = "iceberg_scan_node::IcebergScanType", tag = "5")]
108    pub iceberg_scan_type: i32,
109}
110/// Nested message and enum types in `IcebergScanNode`.
111pub mod iceberg_scan_node {
112    #[derive(prost_helpers::AnyPB)]
113    #[derive(
114        Clone,
115        Copy,
116        Debug,
117        PartialEq,
118        Eq,
119        Hash,
120        PartialOrd,
121        Ord,
122        ::prost::Enumeration
123    )]
124    #[repr(i32)]
125    pub enum IcebergScanType {
126        Unspecified = 0,
127        DataScan = 1,
128        EqualityDeleteScan = 2,
129        PositionDeleteScan = 3,
130        #[deprecated]
131        CountStar = 4,
132    }
133    impl IcebergScanType {
134        /// String value of the enum field names used in the ProtoBuf definition.
135        ///
136        /// The values are not transformed in any way and thus are considered stable
137        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
138        pub fn as_str_name(&self) -> &'static str {
139            match self {
140                Self::Unspecified => "ICEBERG_SCAN_TYPE_UNSPECIFIED",
141                Self::DataScan => "ICEBERG_SCAN_TYPE_DATA_SCAN",
142                Self::EqualityDeleteScan => "ICEBERG_SCAN_TYPE_EQUALITY_DELETE_SCAN",
143                Self::PositionDeleteScan => "ICEBERG_SCAN_TYPE_POSITION_DELETE_SCAN",
144                #[allow(deprecated)]
145                Self::CountStar => "ICEBERG_SCAN_TYPE_COUNT_STAR",
146            }
147        }
148        /// Creates an enum from field names used in the ProtoBuf definition.
149        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
150            match value {
151                "ICEBERG_SCAN_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
152                "ICEBERG_SCAN_TYPE_DATA_SCAN" => Some(Self::DataScan),
153                "ICEBERG_SCAN_TYPE_EQUALITY_DELETE_SCAN" => {
154                    Some(Self::EqualityDeleteScan)
155                }
156                "ICEBERG_SCAN_TYPE_POSITION_DELETE_SCAN" => {
157                    Some(Self::PositionDeleteScan)
158                }
159                "ICEBERG_SCAN_TYPE_COUNT_STAR" => {
160                    Some(#[allow(deprecated)] Self::CountStar)
161                }
162                _ => None,
163            }
164        }
165    }
166}
167#[derive(prost_helpers::AnyPB)]
168#[derive(Clone, PartialEq, ::prost::Message)]
169pub struct IcebergMetadataScanNode {
170    #[prost(btree_map = "string, string", tag = "1")]
171    pub with_properties: ::prost::alloc::collections::BTreeMap<
172        ::prost::alloc::string::String,
173        ::prost::alloc::string::String,
174    >,
175    #[prost(btree_map = "string, message", tag = "2")]
176    pub secret_refs: ::prost::alloc::collections::BTreeMap<
177        ::prost::alloc::string::String,
178        super::secret::SecretRef,
179    >,
180    #[prost(enumeration = "iceberg_metadata_scan_node::MetadataType", tag = "3")]
181    pub metadata_type: i32,
182    #[prost(oneof = "iceberg_metadata_scan_node::TimeTravel", tags = "4, 5")]
183    pub time_travel: ::core::option::Option<iceberg_metadata_scan_node::TimeTravel>,
184}
185/// Nested message and enum types in `IcebergMetadataScanNode`.
186pub mod iceberg_metadata_scan_node {
187    #[derive(prost_helpers::AnyPB)]
188    #[derive(
189        Clone,
190        Copy,
191        Debug,
192        PartialEq,
193        Eq,
194        Hash,
195        PartialOrd,
196        Ord,
197        ::prost::Enumeration
198    )]
199    #[repr(i32)]
200    pub enum MetadataType {
201        Unspecified = 0,
202        Snapshots = 1,
203        Manifests = 2,
204        Files = 3,
205    }
206    impl MetadataType {
207        /// String value of the enum field names used in the ProtoBuf definition.
208        ///
209        /// The values are not transformed in any way and thus are considered stable
210        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
211        pub fn as_str_name(&self) -> &'static str {
212            match self {
213                Self::Unspecified => "METADATA_TYPE_UNSPECIFIED",
214                Self::Snapshots => "METADATA_TYPE_SNAPSHOTS",
215                Self::Manifests => "METADATA_TYPE_MANIFESTS",
216                Self::Files => "METADATA_TYPE_FILES",
217            }
218        }
219        /// Creates an enum from field names used in the ProtoBuf definition.
220        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
221            match value {
222                "METADATA_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
223                "METADATA_TYPE_SNAPSHOTS" => Some(Self::Snapshots),
224                "METADATA_TYPE_MANIFESTS" => Some(Self::Manifests),
225                "METADATA_TYPE_FILES" => Some(Self::Files),
226                _ => None,
227            }
228        }
229    }
230    #[derive(prost_helpers::AnyPB)]
231    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)]
232    pub enum TimeTravel {
233        #[prost(int64, tag = "4")]
234        SnapshotId(i64),
235        #[prost(int64, tag = "5")]
236        TimestampMs(i64),
237    }
238}
239#[derive(prost_helpers::AnyPB)]
240#[derive(Clone, PartialEq, ::prost::Message)]
241pub struct FileScanNode {
242    #[prost(message, repeated, tag = "1")]
243    pub columns: ::prost::alloc::vec::Vec<super::plan_common::ColumnDesc>,
244    #[prost(enumeration = "file_scan_node::FileFormat", tag = "2")]
245    pub file_format: i32,
246    #[prost(enumeration = "file_scan_node::StorageType", tag = "3")]
247    pub storage_type: i32,
248    #[prost(string, tag = "4")]
249    pub s3_region: ::prost::alloc::string::String,
250    #[prost(string, tag = "5")]
251    pub s3_access_key: ::prost::alloc::string::String,
252    #[prost(string, tag = "6")]
253    pub s3_secret_key: ::prost::alloc::string::String,
254    #[prost(string, repeated, tag = "7")]
255    pub file_location: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
256    #[prost(string, tag = "8")]
257    pub s3_endpoint: ::prost::alloc::string::String,
258}
259/// Nested message and enum types in `FileScanNode`.
260pub mod file_scan_node {
261    #[derive(prost_helpers::AnyPB)]
262    #[derive(
263        Clone,
264        Copy,
265        Debug,
266        PartialEq,
267        Eq,
268        Hash,
269        PartialOrd,
270        Ord,
271        ::prost::Enumeration
272    )]
273    #[repr(i32)]
274    pub enum FileFormat {
275        Unspecified = 0,
276        Parquet = 1,
277    }
278    impl FileFormat {
279        /// String value of the enum field names used in the ProtoBuf definition.
280        ///
281        /// The values are not transformed in any way and thus are considered stable
282        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
283        pub fn as_str_name(&self) -> &'static str {
284            match self {
285                Self::Unspecified => "FILE_FORMAT_UNSPECIFIED",
286                Self::Parquet => "PARQUET",
287            }
288        }
289        /// Creates an enum from field names used in the ProtoBuf definition.
290        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
291            match value {
292                "FILE_FORMAT_UNSPECIFIED" => Some(Self::Unspecified),
293                "PARQUET" => Some(Self::Parquet),
294                _ => None,
295            }
296        }
297    }
298    #[derive(prost_helpers::AnyPB)]
299    #[derive(
300        Clone,
301        Copy,
302        Debug,
303        PartialEq,
304        Eq,
305        Hash,
306        PartialOrd,
307        Ord,
308        ::prost::Enumeration
309    )]
310    #[repr(i32)]
311    pub enum StorageType {
312        Unspecified = 0,
313        S3 = 1,
314        Gcs = 2,
315        Azblob = 3,
316    }
317    impl StorageType {
318        /// String value of the enum field names used in the ProtoBuf definition.
319        ///
320        /// The values are not transformed in any way and thus are considered stable
321        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
322        pub fn as_str_name(&self) -> &'static str {
323            match self {
324                Self::Unspecified => "STORAGE_TYPE_UNSPECIFIED",
325                Self::S3 => "S3",
326                Self::Gcs => "GCS",
327                Self::Azblob => "AZBLOB",
328            }
329        }
330        /// Creates an enum from field names used in the ProtoBuf definition.
331        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
332            match value {
333                "STORAGE_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
334                "S3" => Some(Self::S3),
335                "GCS" => Some(Self::Gcs),
336                "AZBLOB" => Some(Self::Azblob),
337                _ => None,
338            }
339        }
340    }
341}
342#[derive(prost_helpers::AnyPB)]
343#[derive(Clone, PartialEq, ::prost::Message)]
344pub struct GcsFileScanNode {
345    #[prost(message, repeated, tag = "1")]
346    pub columns: ::prost::alloc::vec::Vec<super::plan_common::ColumnDesc>,
347    #[prost(enumeration = "gcs_file_scan_node::FileFormat", tag = "2")]
348    pub file_format: i32,
349    #[prost(string, tag = "3")]
350    pub credential: ::prost::alloc::string::String,
351    #[prost(string, repeated, tag = "4")]
352    pub file_location: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
353}
354/// Nested message and enum types in `GcsFileScanNode`.
355pub mod gcs_file_scan_node {
356    #[derive(prost_helpers::AnyPB)]
357    #[derive(
358        Clone,
359        Copy,
360        Debug,
361        PartialEq,
362        Eq,
363        Hash,
364        PartialOrd,
365        Ord,
366        ::prost::Enumeration
367    )]
368    #[repr(i32)]
369    pub enum FileFormat {
370        Unspecified = 0,
371        Parquet = 1,
372    }
373    impl FileFormat {
374        /// String value of the enum field names used in the ProtoBuf definition.
375        ///
376        /// The values are not transformed in any way and thus are considered stable
377        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
378        pub fn as_str_name(&self) -> &'static str {
379            match self {
380                Self::Unspecified => "FILE_FORMAT_UNSPECIFIED",
381                Self::Parquet => "PARQUET",
382            }
383        }
384        /// Creates an enum from field names used in the ProtoBuf definition.
385        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
386            match value {
387                "FILE_FORMAT_UNSPECIFIED" => Some(Self::Unspecified),
388                "PARQUET" => Some(Self::Parquet),
389                _ => None,
390            }
391        }
392    }
393}
394#[derive(prost_helpers::AnyPB)]
395#[derive(Clone, PartialEq, ::prost::Message)]
396pub struct AzblobFileScanNode {
397    #[prost(message, repeated, tag = "1")]
398    pub columns: ::prost::alloc::vec::Vec<super::plan_common::ColumnDesc>,
399    #[prost(enumeration = "azblob_file_scan_node::FileFormat", tag = "2")]
400    pub file_format: i32,
401    #[prost(string, tag = "3")]
402    pub account_name: ::prost::alloc::string::String,
403    #[prost(string, tag = "4")]
404    pub account_key: ::prost::alloc::string::String,
405    #[prost(string, tag = "5")]
406    pub endpoint: ::prost::alloc::string::String,
407    #[prost(string, repeated, tag = "6")]
408    pub file_location: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
409}
410/// Nested message and enum types in `AzblobFileScanNode`.
411pub mod azblob_file_scan_node {
412    #[derive(prost_helpers::AnyPB)]
413    #[derive(
414        Clone,
415        Copy,
416        Debug,
417        PartialEq,
418        Eq,
419        Hash,
420        PartialOrd,
421        Ord,
422        ::prost::Enumeration
423    )]
424    #[repr(i32)]
425    pub enum FileFormat {
426        Unspecified = 0,
427        Parquet = 1,
428    }
429    impl FileFormat {
430        /// String value of the enum field names used in the ProtoBuf definition.
431        ///
432        /// The values are not transformed in any way and thus are considered stable
433        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
434        pub fn as_str_name(&self) -> &'static str {
435            match self {
436                Self::Unspecified => "FILE_FORMAT_UNSPECIFIED",
437                Self::Parquet => "PARQUET",
438            }
439        }
440        /// Creates an enum from field names used in the ProtoBuf definition.
441        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
442            match value {
443                "FILE_FORMAT_UNSPECIFIED" => Some(Self::Unspecified),
444                "PARQUET" => Some(Self::Parquet),
445                _ => None,
446            }
447        }
448    }
449}
450/// NOTE(kwannoel): This will only be used in batch mode. We can change the definition as needed.
451#[derive(prost_helpers::AnyPB)]
452#[derive(Clone, PartialEq, ::prost::Message)]
453pub struct PostgresQueryNode {
454    #[prost(message, repeated, tag = "1")]
455    pub columns: ::prost::alloc::vec::Vec<super::plan_common::ColumnDesc>,
456    #[prost(string, tag = "2")]
457    pub hostname: ::prost::alloc::string::String,
458    #[prost(string, tag = "3")]
459    pub port: ::prost::alloc::string::String,
460    #[prost(string, tag = "4")]
461    pub username: ::prost::alloc::string::String,
462    #[prost(string, tag = "5")]
463    pub password: ::prost::alloc::string::String,
464    #[prost(string, tag = "6")]
465    pub database: ::prost::alloc::string::String,
466    #[prost(string, tag = "7")]
467    pub query: ::prost::alloc::string::String,
468    #[prost(string, tag = "8")]
469    pub ssl_mode: ::prost::alloc::string::String,
470    #[prost(string, tag = "9")]
471    pub ssl_root_cert: ::prost::alloc::string::String,
472}
473/// NOTE(kwannoel): This will only be used in batch mode. We can change the definition as needed.
474#[derive(prost_helpers::AnyPB)]
475#[derive(Clone, PartialEq, ::prost::Message)]
476pub struct MySqlQueryNode {
477    #[prost(message, repeated, tag = "1")]
478    pub columns: ::prost::alloc::vec::Vec<super::plan_common::ColumnDesc>,
479    #[prost(string, tag = "2")]
480    pub hostname: ::prost::alloc::string::String,
481    #[prost(string, tag = "3")]
482    pub port: ::prost::alloc::string::String,
483    #[prost(string, tag = "4")]
484    pub username: ::prost::alloc::string::String,
485    #[prost(string, tag = "5")]
486    pub password: ::prost::alloc::string::String,
487    #[prost(string, tag = "6")]
488    pub database: ::prost::alloc::string::String,
489    #[prost(string, tag = "7")]
490    pub query: ::prost::alloc::string::String,
491}
492/// NOTE(kwannoel): This will only be used in batch mode. We can change the definition as needed.
493#[derive(prost_helpers::AnyPB)]
494#[derive(Clone, PartialEq, ::prost::Message)]
495pub struct MssqlQueryNode {
496    #[prost(message, repeated, tag = "1")]
497    pub columns: ::prost::alloc::vec::Vec<super::plan_common::ColumnDesc>,
498    #[prost(string, tag = "2")]
499    pub hostname: ::prost::alloc::string::String,
500    #[prost(string, tag = "3")]
501    pub port: ::prost::alloc::string::String,
502    #[prost(string, tag = "4")]
503    pub username: ::prost::alloc::string::String,
504    #[prost(string, tag = "5")]
505    pub password: ::prost::alloc::string::String,
506    #[prost(string, tag = "6")]
507    pub database: ::prost::alloc::string::String,
508    #[prost(string, tag = "7")]
509    pub query: ::prost::alloc::string::String,
510    /// SQL Server TLS settings. `trust_cert` skips certificate-chain and
511    /// hostname validation; it does not contain certificate data or a path.
512    #[prost(bool, tag = "8")]
513    pub encrypt: bool,
514    #[prost(bool, tag = "9")]
515    pub trust_cert: bool,
516}
517#[derive(prost_helpers::AnyPB)]
518#[derive(Clone, PartialEq, ::prost::Message)]
519pub struct ProjectNode {
520    #[prost(message, repeated, tag = "1")]
521    pub select_list: ::prost::alloc::vec::Vec<super::expr::ExprNode>,
522}
523#[derive(prost_helpers::AnyPB)]
524#[derive(Clone, PartialEq, ::prost::Message)]
525pub struct FilterNode {
526    #[prost(message, optional, tag = "1")]
527    pub search_condition: ::core::option::Option<super::expr::ExprNode>,
528}
529#[derive(prost_helpers::AnyPB)]
530#[derive(Clone, PartialEq, ::prost::Message)]
531pub struct LogRowSeqScanNode {
532    #[prost(message, optional, tag = "1")]
533    pub table_desc: ::core::option::Option<super::plan_common::StorageTableDesc>,
534    /// This records the mandatory column_ids of the original table, excluding op
535    #[prost(int32, repeated, tag = "2")]
536    pub column_ids: ::prost::alloc::vec::Vec<i32>,
537    /// The partition to read for scan tasks.
538    ///
539    /// Will be filled by the scheduler.
540    #[prost(message, optional, tag = "3")]
541    pub vnode_bitmap: ::core::option::Option<super::common::Buffer>,
542    #[prost(message, optional, tag = "4")]
543    pub old_epoch: ::core::option::Option<super::common::BatchQueryEpoch>,
544    #[prost(message, optional, tag = "5")]
545    pub new_epoch: ::core::option::Option<super::common::BatchQueryEpoch>,
546    #[prost(bool, tag = "6")]
547    pub ordered: bool,
548    #[prost(message, optional, tag = "7")]
549    pub scan_range: ::core::option::Option<ScanRange>,
550}
551#[derive(prost_helpers::AnyPB)]
552#[derive(Clone, PartialEq, ::prost::Message)]
553pub struct InsertNode {
554    /// Id of the table to perform inserting.
555    #[prost(uint32, tag = "1", wrapper = "crate::id::TableId")]
556    pub table_id: crate::id::TableId,
557    /// Version of the table.
558    #[prost(uint64, tag = "5")]
559    pub table_version_id: u64,
560    #[prost(uint32, repeated, tag = "2")]
561    pub column_indices: ::prost::alloc::vec::Vec<u32>,
562    #[prost(message, optional, tag = "6")]
563    pub default_columns: ::core::option::Option<super::plan_common::DefaultColumns>,
564    /// An optional field and will be `None` for tables without user-defined pk.
565    /// The `BatchInsertExecutor` should add a column with NULL value which will
566    /// be filled in streaming.
567    #[prost(uint32, optional, tag = "3")]
568    pub row_id_index: ::core::option::Option<u32>,
569    #[prost(bool, tag = "4")]
570    pub returning: bool,
571    /// Session id is used to ensure that dml data from the same session should be sent to a fixed worker node and channel.
572    #[prost(uint32, tag = "7")]
573    pub session_id: u32,
574    /// If enabled, wait until this DML transaction is included in a successful checkpoint.
575    #[prost(bool, tag = "8")]
576    pub wait_for_persistence: bool,
577}
578#[derive(prost_helpers::AnyPB)]
579#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
580pub struct DeleteNode {
581    /// Id of the table to perform deleting.
582    #[prost(uint32, tag = "1", wrapper = "crate::id::TableId")]
583    pub table_id: crate::id::TableId,
584    /// Version of the table.
585    #[prost(uint64, tag = "3")]
586    pub table_version_id: u64,
587    /// Primary key indices of the table.
588    #[prost(uint32, repeated, tag = "5")]
589    pub pk_indices: ::prost::alloc::vec::Vec<u32>,
590    #[prost(bool, tag = "2")]
591    pub returning: bool,
592    /// If enabled, only key columns are kept and the rest are NULL.
593    #[prost(bool, tag = "6")]
594    pub upsert: bool,
595    /// Session id is used to ensure that dml data from the same session should be sent to a fixed worker node and channel.
596    #[prost(uint32, tag = "4")]
597    pub session_id: u32,
598    /// If enabled, wait until this DML transaction is included in a successful checkpoint.
599    #[prost(bool, tag = "7")]
600    pub wait_for_persistence: bool,
601}
602#[derive(prost_helpers::AnyPB)]
603#[derive(Clone, PartialEq, ::prost::Message)]
604pub struct UpdateNode {
605    /// Id of the table to perform updating.
606    #[prost(uint32, tag = "1", wrapper = "crate::id::TableId")]
607    pub table_id: crate::id::TableId,
608    /// Version of the table.
609    #[prost(uint64, tag = "2")]
610    pub table_version_id: u64,
611    /// Expressions to generate `U-` records.
612    #[prost(message, repeated, tag = "3")]
613    pub old_exprs: ::prost::alloc::vec::Vec<super::expr::ExprNode>,
614    /// Expressions to generate `U+` records.
615    #[prost(message, repeated, tag = "4")]
616    pub new_exprs: ::prost::alloc::vec::Vec<super::expr::ExprNode>,
617    #[prost(bool, tag = "5")]
618    pub returning: bool,
619    /// If enabled, only `Insert` records are emitted for new rows.
620    #[prost(bool, tag = "7")]
621    pub upsert: bool,
622    /// Session id is used to ensure that dml data from the same session should be sent to a fixed worker node and channel.
623    #[prost(uint32, tag = "6")]
624    pub session_id: u32,
625    /// If enabled, wait until this DML transaction is included in a successful checkpoint.
626    #[prost(bool, tag = "8")]
627    pub wait_for_persistence: bool,
628}
629#[derive(prost_helpers::AnyPB)]
630#[derive(Clone, PartialEq, ::prost::Message)]
631pub struct ValuesNode {
632    #[prost(message, repeated, tag = "1")]
633    pub tuples: ::prost::alloc::vec::Vec<values_node::ExprTuple>,
634    #[prost(message, repeated, tag = "2")]
635    pub fields: ::prost::alloc::vec::Vec<super::plan_common::Field>,
636}
637/// Nested message and enum types in `ValuesNode`.
638pub mod values_node {
639    #[derive(prost_helpers::AnyPB)]
640    #[derive(Clone, PartialEq, ::prost::Message)]
641    pub struct ExprTuple {
642        #[prost(message, repeated, tag = "1")]
643        pub cells: ::prost::alloc::vec::Vec<super::super::expr::ExprNode>,
644    }
645}
646#[derive(prost_helpers::AnyPB)]
647#[derive(Clone, PartialEq, ::prost::Message)]
648pub struct SortNode {
649    #[prost(message, repeated, tag = "1")]
650    pub column_orders: ::prost::alloc::vec::Vec<super::common::ColumnOrder>,
651}
652#[derive(prost_helpers::AnyPB)]
653#[derive(Clone, PartialEq, ::prost::Message)]
654pub struct TopNNode {
655    #[prost(message, repeated, tag = "1")]
656    pub column_orders: ::prost::alloc::vec::Vec<super::common::ColumnOrder>,
657    #[prost(uint64, tag = "2")]
658    pub limit: u64,
659    #[prost(uint64, tag = "3")]
660    pub offset: u64,
661    #[prost(bool, tag = "4")]
662    pub with_ties: bool,
663}
664#[derive(prost_helpers::AnyPB)]
665#[derive(Clone, PartialEq, ::prost::Message)]
666pub struct GroupTopNNode {
667    #[prost(message, repeated, tag = "1")]
668    pub column_orders: ::prost::alloc::vec::Vec<super::common::ColumnOrder>,
669    #[prost(uint64, tag = "2")]
670    pub limit: u64,
671    #[prost(uint64, tag = "3")]
672    pub offset: u64,
673    #[prost(uint32, repeated, tag = "4")]
674    pub group_key: ::prost::alloc::vec::Vec<u32>,
675    #[prost(bool, tag = "5")]
676    pub with_ties: bool,
677}
678#[derive(prost_helpers::AnyPB)]
679#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
680pub struct LimitNode {
681    #[prost(uint64, tag = "1")]
682    pub limit: u64,
683    #[prost(uint64, tag = "2")]
684    pub offset: u64,
685}
686#[derive(prost_helpers::AnyPB)]
687#[derive(Clone, PartialEq, ::prost::Message)]
688pub struct NestedLoopJoinNode {
689    #[prost(enumeration = "super::plan_common::JoinType", tag = "1")]
690    pub join_type: i32,
691    #[prost(message, optional, tag = "2")]
692    pub join_cond: ::core::option::Option<super::expr::ExprNode>,
693    #[prost(uint32, repeated, tag = "3")]
694    pub output_indices: ::prost::alloc::vec::Vec<u32>,
695}
696#[derive(prost_helpers::AnyPB)]
697#[derive(Clone, PartialEq, ::prost::Message)]
698pub struct HashAggNode {
699    #[prost(uint32, repeated, tag = "1")]
700    pub group_key: ::prost::alloc::vec::Vec<u32>,
701    #[prost(message, repeated, tag = "2")]
702    pub agg_calls: ::prost::alloc::vec::Vec<super::expr::AggCall>,
703}
704#[derive(prost_helpers::AnyPB)]
705#[derive(Clone, PartialEq, ::prost::Message)]
706pub struct ExpandNode {
707    #[prost(message, repeated, tag = "1")]
708    pub column_subsets: ::prost::alloc::vec::Vec<expand_node::Subset>,
709}
710/// Nested message and enum types in `ExpandNode`.
711pub mod expand_node {
712    #[derive(prost_helpers::AnyPB)]
713    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
714    pub struct Subset {
715        #[prost(uint32, repeated, tag = "1")]
716        pub column_indices: ::prost::alloc::vec::Vec<u32>,
717    }
718}
719#[derive(prost_helpers::AnyPB)]
720#[derive(Clone, PartialEq, ::prost::Message)]
721pub struct ProjectSetNode {
722    #[prost(message, repeated, tag = "1")]
723    pub select_list: ::prost::alloc::vec::Vec<super::expr::ProjectSetSelectItem>,
724}
725#[derive(prost_helpers::AnyPB)]
726#[derive(Clone, PartialEq, ::prost::Message)]
727pub struct SortAggNode {
728    #[prost(message, repeated, tag = "1")]
729    pub group_key: ::prost::alloc::vec::Vec<super::expr::ExprNode>,
730    #[prost(message, repeated, tag = "2")]
731    pub agg_calls: ::prost::alloc::vec::Vec<super::expr::AggCall>,
732}
733#[derive(prost_helpers::AnyPB)]
734#[derive(Clone, PartialEq, ::prost::Message)]
735pub struct HashJoinNode {
736    #[prost(enumeration = "super::plan_common::JoinType", tag = "1")]
737    pub join_type: i32,
738    #[prost(int32, repeated, tag = "2")]
739    pub left_key: ::prost::alloc::vec::Vec<i32>,
740    #[prost(int32, repeated, tag = "3")]
741    pub right_key: ::prost::alloc::vec::Vec<i32>,
742    #[prost(message, optional, tag = "4")]
743    pub condition: ::core::option::Option<super::expr::ExprNode>,
744    #[prost(uint32, repeated, tag = "5")]
745    pub output_indices: ::prost::alloc::vec::Vec<u32>,
746    /// Null safe means it treats `null = null` as true.
747    /// Each key pair can be null safe independently. (left_key, right_key, null_safe)
748    #[prost(bool, repeated, tag = "6")]
749    pub null_safe: ::prost::alloc::vec::Vec<bool>,
750    #[prost(message, optional, tag = "7")]
751    pub asof_desc: ::core::option::Option<super::plan_common::AsOfJoinDesc>,
752}
753#[derive(prost_helpers::AnyPB)]
754#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
755pub struct SortMergeJoinNode {
756    #[prost(enumeration = "super::plan_common::JoinType", tag = "1")]
757    pub join_type: i32,
758    #[prost(int32, repeated, tag = "2")]
759    pub left_key: ::prost::alloc::vec::Vec<i32>,
760    #[prost(int32, repeated, tag = "3")]
761    pub right_key: ::prost::alloc::vec::Vec<i32>,
762    #[prost(enumeration = "super::common::Direction", tag = "4")]
763    pub direction: i32,
764    #[prost(uint32, repeated, tag = "5")]
765    pub output_indices: ::prost::alloc::vec::Vec<u32>,
766}
767#[derive(prost_helpers::AnyPB)]
768#[derive(Clone, PartialEq, ::prost::Message)]
769pub struct HopWindowNode {
770    #[prost(uint32, tag = "1")]
771    pub time_col: u32,
772    #[prost(message, optional, tag = "2")]
773    pub window_slide: ::core::option::Option<super::data::Interval>,
774    #[prost(message, optional, tag = "3")]
775    pub window_size: ::core::option::Option<super::data::Interval>,
776    #[prost(uint32, repeated, tag = "4")]
777    pub output_indices: ::prost::alloc::vec::Vec<u32>,
778    #[prost(message, repeated, tag = "5")]
779    pub window_start_exprs: ::prost::alloc::vec::Vec<super::expr::ExprNode>,
780    #[prost(message, repeated, tag = "6")]
781    pub window_end_exprs: ::prost::alloc::vec::Vec<super::expr::ExprNode>,
782}
783#[derive(prost_helpers::AnyPB)]
784#[derive(Clone, PartialEq, ::prost::Message)]
785pub struct TableFunctionNode {
786    #[prost(message, optional, tag = "1")]
787    pub table_function: ::core::option::Option<super::expr::TableFunction>,
788}
789/// Task is a running instance of Stage.
790#[derive(prost_helpers::AnyPB)]
791#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
792pub struct TaskId {
793    #[prost(string, tag = "1")]
794    pub query_id: ::prost::alloc::string::String,
795    #[prost(uint32, tag = "2")]
796    pub stage_id: u32,
797    #[prost(uint64, tag = "3")]
798    pub task_id: u64,
799}
800/// Every task will create N buffers (channels) for parent operators to fetch results from,
801/// where N is the parallelism of parent stage.
802#[derive(prost_helpers::AnyPB)]
803#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
804pub struct TaskOutputId {
805    #[prost(message, optional, tag = "1")]
806    pub task_id: ::core::option::Option<TaskId>,
807    /// The id of output channel to fetch from
808    #[prost(uint64, tag = "2")]
809    pub output_id: u64,
810}
811#[derive(prost_helpers::AnyPB)]
812#[derive(Clone, PartialEq, ::prost::Message)]
813pub struct LocalExecutePlan {
814    #[prost(message, optional, tag = "1")]
815    pub plan: ::core::option::Option<PlanFragment>,
816    #[prost(map = "string, string", tag = "3")]
817    pub tracing_context: ::std::collections::HashMap<
818        ::prost::alloc::string::String,
819        ::prost::alloc::string::String,
820    >,
821}
822/// ExchangeSource describes where to read results from children operators
823#[derive(prost_helpers::AnyPB)]
824#[derive(Clone, PartialEq, ::prost::Message)]
825pub struct ExchangeSource {
826    #[prost(message, optional, tag = "1")]
827    pub task_output_id: ::core::option::Option<TaskOutputId>,
828    #[prost(message, optional, tag = "2")]
829    pub host: ::core::option::Option<super::common::HostAddress>,
830    #[prost(oneof = "exchange_source::LocalExecutePlan", tags = "3")]
831    pub local_execute_plan: ::core::option::Option<exchange_source::LocalExecutePlan>,
832}
833/// Nested message and enum types in `ExchangeSource`.
834pub mod exchange_source {
835    #[derive(prost_helpers::AnyPB)]
836    #[derive(Clone, PartialEq, ::prost::Oneof)]
837    pub enum LocalExecutePlan {
838        #[prost(message, tag = "3")]
839        Plan(super::LocalExecutePlan),
840    }
841}
842#[derive(prost_helpers::AnyPB)]
843#[derive(Clone, PartialEq, ::prost::Message)]
844pub struct ExchangeNode {
845    #[prost(message, repeated, tag = "1")]
846    pub sources: ::prost::alloc::vec::Vec<ExchangeSource>,
847    /// sequential means each tasks of the exchange node will be executed sequentially.
848    #[prost(bool, tag = "2")]
849    pub sequential: bool,
850    #[prost(message, repeated, tag = "3")]
851    pub input_schema: ::prost::alloc::vec::Vec<super::plan_common::Field>,
852}
853#[derive(prost_helpers::AnyPB)]
854#[derive(Clone, PartialEq, ::prost::Message)]
855pub struct MergeSortExchangeNode {
856    #[prost(message, optional, tag = "1")]
857    pub exchange: ::core::option::Option<ExchangeNode>,
858    #[prost(message, repeated, tag = "2")]
859    pub column_orders: ::prost::alloc::vec::Vec<super::common::ColumnOrder>,
860}
861#[derive(prost_helpers::AnyPB)]
862#[derive(Clone, PartialEq, ::prost::Message)]
863pub struct LocalLookupJoinNode {
864    #[prost(enumeration = "super::plan_common::JoinType", tag = "1")]
865    pub join_type: i32,
866    #[prost(message, optional, tag = "2")]
867    pub condition: ::core::option::Option<super::expr::ExprNode>,
868    #[prost(uint32, repeated, tag = "3")]
869    pub outer_side_key: ::prost::alloc::vec::Vec<u32>,
870    #[prost(uint32, repeated, tag = "4")]
871    pub inner_side_key: ::prost::alloc::vec::Vec<u32>,
872    #[prost(uint32, tag = "5")]
873    pub lookup_prefix_len: u32,
874    #[prost(message, optional, tag = "6")]
875    pub inner_side_table_desc: ::core::option::Option<
876        super::plan_common::StorageTableDesc,
877    >,
878    #[prost(uint64, repeated, tag = "7")]
879    pub inner_side_vnode_mapping: ::prost::alloc::vec::Vec<u64>,
880    #[prost(int32, repeated, tag = "8")]
881    pub inner_side_column_ids: ::prost::alloc::vec::Vec<i32>,
882    #[prost(uint32, repeated, tag = "9")]
883    pub output_indices: ::prost::alloc::vec::Vec<u32>,
884    #[prost(message, repeated, tag = "10")]
885    pub worker_nodes: ::prost::alloc::vec::Vec<super::common::WorkerNode>,
886    /// Null safe means it treats `null = null` as true.
887    /// Each key pair can be null safe independently. (left_key, right_key, null_safe)
888    #[prost(bool, repeated, tag = "11")]
889    pub null_safe: ::prost::alloc::vec::Vec<bool>,
890    #[prost(message, optional, tag = "12")]
891    pub query_epoch: ::core::option::Option<super::common::BatchQueryEpoch>,
892    #[prost(message, optional, tag = "13")]
893    pub asof_desc: ::core::option::Option<super::plan_common::AsOfJoinDesc>,
894}
895/// RFC: A new schedule way for distributed lookup join
896/// <https://github.com/risingwavelabs/rfcs/pull/6>
897#[derive(prost_helpers::AnyPB)]
898#[derive(Clone, PartialEq, ::prost::Message)]
899pub struct DistributedLookupJoinNode {
900    #[prost(enumeration = "super::plan_common::JoinType", tag = "1")]
901    pub join_type: i32,
902    #[prost(message, optional, tag = "2")]
903    pub condition: ::core::option::Option<super::expr::ExprNode>,
904    #[prost(uint32, repeated, tag = "3")]
905    pub outer_side_key: ::prost::alloc::vec::Vec<u32>,
906    #[prost(uint32, repeated, tag = "4")]
907    pub inner_side_key: ::prost::alloc::vec::Vec<u32>,
908    #[prost(uint32, tag = "5")]
909    pub lookup_prefix_len: u32,
910    #[prost(message, optional, tag = "6")]
911    pub inner_side_table_desc: ::core::option::Option<
912        super::plan_common::StorageTableDesc,
913    >,
914    #[prost(int32, repeated, tag = "7")]
915    pub inner_side_column_ids: ::prost::alloc::vec::Vec<i32>,
916    #[prost(uint32, repeated, tag = "8")]
917    pub output_indices: ::prost::alloc::vec::Vec<u32>,
918    /// Null safe means it treats `null = null` as true.
919    /// Each key pair can be null safe independently. (left_key, right_key, null_safe)
920    #[prost(bool, repeated, tag = "9")]
921    pub null_safe: ::prost::alloc::vec::Vec<bool>,
922    #[prost(message, optional, tag = "10")]
923    pub query_epoch: ::core::option::Option<super::common::BatchQueryEpoch>,
924    #[prost(message, optional, tag = "11")]
925    pub asof_desc: ::core::option::Option<super::plan_common::AsOfJoinDesc>,
926}
927#[derive(prost_helpers::AnyPB)]
928#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
929pub struct UnionNode {}
930#[derive(prost_helpers::AnyPB)]
931#[derive(Clone, PartialEq, ::prost::Message)]
932pub struct SortOverWindowNode {
933    #[prost(message, repeated, tag = "1")]
934    pub calls: ::prost::alloc::vec::Vec<super::expr::WindowFunction>,
935    #[prost(uint32, repeated, tag = "2")]
936    pub partition_by: ::prost::alloc::vec::Vec<u32>,
937    #[prost(message, repeated, tag = "3")]
938    pub order_by: ::prost::alloc::vec::Vec<super::common::ColumnOrder>,
939}
940#[derive(prost_helpers::AnyPB)]
941#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
942pub struct MaxOneRowNode {}
943#[derive(prost_helpers::AnyPB)]
944#[derive(Clone, PartialEq, ::prost::Message)]
945pub struct VectorIndexNearestNode {
946    #[prost(message, optional, tag = "1")]
947    pub reader_desc: ::core::option::Option<super::plan_common::VectorIndexReaderDesc>,
948    #[prost(uint32, tag = "2")]
949    pub vector_column_idx: u32,
950    #[prost(message, optional, tag = "8")]
951    pub query_epoch: ::core::option::Option<super::common::BatchQueryEpoch>,
952}
953#[derive(prost_helpers::AnyPB)]
954#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
955pub struct GetChannelDeltaStatsNode {
956    /// Optional timestamp to get channel stats at a specific time
957    #[prost(uint64, optional, tag = "1")]
958    pub at_time: ::core::option::Option<u64>,
959    /// Time offset in seconds for the query window
960    #[prost(uint64, optional, tag = "2")]
961    pub time_offset: ::core::option::Option<u64>,
962}
963#[derive(prost_helpers::AnyPB)]
964#[derive(Clone, PartialEq, ::prost::Message)]
965pub struct PlanNode {
966    #[prost(message, repeated, tag = "1")]
967    pub children: ::prost::alloc::vec::Vec<PlanNode>,
968    #[prost(string, tag = "24")]
969    pub identity: ::prost::alloc::string::String,
970    #[prost(
971        oneof = "plan_node::NodeBody",
972        tags = "2, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19, 21, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 100, 101"
973    )]
974    pub node_body: ::core::option::Option<plan_node::NodeBody>,
975}
976/// Nested message and enum types in `PlanNode`.
977pub mod plan_node {
978    #[derive(prost_helpers::AnyPB)]
979    #[derive(::enum_as_inner::EnumAsInner, ::strum::Display, ::strum::EnumDiscriminants)]
980    #[strum_discriminants(derive(::strum::Display, Hash))]
981    #[derive(Clone, PartialEq, ::prost::Oneof)]
982    pub enum NodeBody {
983        #[prost(message, tag = "2")]
984        Insert(super::InsertNode),
985        #[prost(message, tag = "3")]
986        Delete(super::DeleteNode),
987        #[prost(message, tag = "4")]
988        Update(super::UpdateNode),
989        #[prost(message, tag = "5")]
990        Project(super::ProjectNode),
991        #[prost(message, tag = "7")]
992        HashAgg(super::HashAggNode),
993        #[prost(message, tag = "8")]
994        Filter(super::FilterNode),
995        #[prost(message, tag = "9")]
996        Exchange(super::ExchangeNode),
997        #[prost(message, tag = "10")]
998        Sort(super::SortNode),
999        #[prost(message, tag = "11")]
1000        NestedLoopJoin(super::NestedLoopJoinNode),
1001        #[prost(message, tag = "14")]
1002        TopN(super::TopNNode),
1003        #[prost(message, tag = "15")]
1004        SortAgg(super::SortAggNode),
1005        #[prost(message, tag = "16")]
1006        RowSeqScan(super::RowSeqScanNode),
1007        #[prost(message, tag = "17")]
1008        Limit(super::LimitNode),
1009        #[prost(message, tag = "18")]
1010        Values(super::ValuesNode),
1011        #[prost(message, tag = "19")]
1012        HashJoin(super::HashJoinNode),
1013        #[prost(message, tag = "21")]
1014        MergeSortExchange(super::MergeSortExchangeNode),
1015        #[prost(message, tag = "25")]
1016        HopWindow(super::HopWindowNode),
1017        #[prost(message, tag = "26")]
1018        TableFunction(super::TableFunctionNode),
1019        #[prost(message, tag = "27")]
1020        SysRowSeqScan(super::SysRowSeqScanNode),
1021        #[prost(message, tag = "28")]
1022        Expand(super::ExpandNode),
1023        #[prost(message, tag = "29")]
1024        LocalLookupJoin(super::LocalLookupJoinNode),
1025        #[prost(message, tag = "30")]
1026        ProjectSet(super::ProjectSetNode),
1027        #[prost(message, tag = "31")]
1028        Union(super::UnionNode),
1029        #[prost(message, tag = "32")]
1030        GroupTopN(super::GroupTopNNode),
1031        #[prost(message, tag = "33")]
1032        DistributedLookupJoin(super::DistributedLookupJoinNode),
1033        #[prost(message, tag = "34")]
1034        Source(super::SourceNode),
1035        #[prost(message, tag = "35")]
1036        SortOverWindow(super::SortOverWindowNode),
1037        #[prost(message, tag = "36")]
1038        MaxOneRow(super::MaxOneRowNode),
1039        #[prost(message, tag = "37")]
1040        LogRowSeqScan(super::LogRowSeqScanNode),
1041        #[prost(message, tag = "38")]
1042        FileScan(super::FileScanNode),
1043        #[prost(message, tag = "39")]
1044        IcebergScan(super::IcebergScanNode),
1045        #[prost(message, tag = "40")]
1046        PostgresQuery(super::PostgresQueryNode),
1047        #[prost(message, tag = "41")]
1048        MysqlQuery(super::MySqlQueryNode),
1049        #[prost(message, tag = "42")]
1050        GcsFileScan(super::GcsFileScanNode),
1051        #[prost(message, tag = "43")]
1052        AzblobFileScan(super::AzblobFileScanNode),
1053        #[prost(message, tag = "44")]
1054        VectorIndexNearest(super::VectorIndexNearestNode),
1055        #[prost(message, tag = "45")]
1056        GetChannelDeltaStats(super::GetChannelDeltaStatsNode),
1057        #[prost(message, tag = "46")]
1058        IcebergMetadataScan(super::IcebergMetadataScanNode),
1059        #[prost(message, tag = "47")]
1060        MssqlQuery(super::MssqlQueryNode),
1061        /// The following nodes are used for testing.
1062        #[prost(bool, tag = "100")]
1063        BlockExecutor(bool),
1064        #[prost(bool, tag = "101")]
1065        BusyLoopExecutor(bool),
1066    }
1067}
1068/// ExchangeInfo determines how to distribute results to tasks of next stage.
1069///
1070/// Note that the fragment itself does not know the where are the receivers. Instead, it prepares results in
1071/// N buffers and wait for parent operators (`Exchange` nodes) to pull data from a specified buffer
1072#[derive(prost_helpers::AnyPB)]
1073#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1074pub struct ExchangeInfo {
1075    #[prost(enumeration = "exchange_info::DistributionMode", tag = "1")]
1076    pub mode: i32,
1077    #[prost(oneof = "exchange_info::Distribution", tags = "2, 3, 4")]
1078    pub distribution: ::core::option::Option<exchange_info::Distribution>,
1079}
1080/// Nested message and enum types in `ExchangeInfo`.
1081pub mod exchange_info {
1082    #[derive(prost_helpers::AnyPB)]
1083    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1084    pub struct BroadcastInfo {
1085        #[prost(uint32, tag = "1")]
1086        pub count: u32,
1087    }
1088    #[derive(prost_helpers::AnyPB)]
1089    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1090    pub struct HashInfo {
1091        #[prost(uint32, tag = "1")]
1092        pub output_count: u32,
1093        #[prost(uint32, repeated, tag = "3")]
1094        pub key: ::prost::alloc::vec::Vec<u32>,
1095    }
1096    #[derive(prost_helpers::AnyPB)]
1097    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1098    pub struct ConsistentHashInfo {
1099        /// `vmap` maps virtual node to down stream task id
1100        #[prost(uint32, repeated, tag = "1")]
1101        pub vmap: ::prost::alloc::vec::Vec<u32>,
1102        #[prost(uint32, repeated, tag = "2")]
1103        pub key: ::prost::alloc::vec::Vec<u32>,
1104    }
1105    #[derive(prost_helpers::AnyPB)]
1106    #[derive(
1107        Clone,
1108        Copy,
1109        Debug,
1110        PartialEq,
1111        Eq,
1112        Hash,
1113        PartialOrd,
1114        Ord,
1115        ::prost::Enumeration
1116    )]
1117    #[repr(i32)]
1118    pub enum DistributionMode {
1119        /// No partitioning at all, used for root segment which aggregates query results
1120        Unspecified = 0,
1121        Single = 1,
1122        Broadcast = 2,
1123        Hash = 3,
1124        ConsistentHash = 4,
1125    }
1126    impl DistributionMode {
1127        /// String value of the enum field names used in the ProtoBuf definition.
1128        ///
1129        /// The values are not transformed in any way and thus are considered stable
1130        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1131        pub fn as_str_name(&self) -> &'static str {
1132            match self {
1133                Self::Unspecified => "UNSPECIFIED",
1134                Self::Single => "SINGLE",
1135                Self::Broadcast => "BROADCAST",
1136                Self::Hash => "HASH",
1137                Self::ConsistentHash => "CONSISTENT_HASH",
1138            }
1139        }
1140        /// Creates an enum from field names used in the ProtoBuf definition.
1141        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1142            match value {
1143                "UNSPECIFIED" => Some(Self::Unspecified),
1144                "SINGLE" => Some(Self::Single),
1145                "BROADCAST" => Some(Self::Broadcast),
1146                "HASH" => Some(Self::Hash),
1147                "CONSISTENT_HASH" => Some(Self::ConsistentHash),
1148                _ => None,
1149            }
1150        }
1151    }
1152    #[derive(prost_helpers::AnyPB)]
1153    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1154    pub enum Distribution {
1155        #[prost(message, tag = "2")]
1156        BroadcastInfo(BroadcastInfo),
1157        #[prost(message, tag = "3")]
1158        HashInfo(HashInfo),
1159        #[prost(message, tag = "4")]
1160        ConsistentHashInfo(ConsistentHashInfo),
1161    }
1162}
1163#[derive(prost_helpers::AnyPB)]
1164#[derive(Clone, PartialEq, ::prost::Message)]
1165pub struct PlanFragment {
1166    #[prost(message, optional, tag = "1")]
1167    pub root: ::core::option::Option<PlanNode>,
1168    #[prost(message, optional, tag = "2")]
1169    pub exchange_info: ::core::option::Option<ExchangeInfo>,
1170}