datafusion_distributed/distributed_planner/
network_boundary.rs1use crate::{NetworkBroadcastExec, NetworkCoalesceExec, NetworkShuffleExec, Stage};
2use datafusion::physical_plan::ExecutionPlan;
3use std::sync::Arc;
4
5pub trait NetworkBoundary: ExecutionPlan {
9 fn with_input_stage(
14 &self,
15 input_stage: Stage,
16 ) -> datafusion::common::Result<Arc<dyn ExecutionPlan>>;
17
18 fn input_stage(&self) -> &Stage;
20}
21
22pub trait NetworkBoundaryExt {
24 fn as_network_boundary(&self) -> Option<&dyn NetworkBoundary>;
26 fn is_network_boundary(&self) -> bool {
28 self.as_network_boundary().is_some()
29 }
30}
31
32impl NetworkBoundaryExt for dyn ExecutionPlan {
33 fn as_network_boundary(&self) -> Option<&dyn NetworkBoundary> {
34 if let Some(node) = self.as_any().downcast_ref::<NetworkShuffleExec>() {
35 Some(node)
36 } else if let Some(node) = self.as_any().downcast_ref::<NetworkCoalesceExec>() {
37 Some(node)
38 } else if let Some(node) = self.as_any().downcast_ref::<NetworkBroadcastExec>() {
39 Some(node)
40 } else {
41 None
42 }
43 }
44}