diff --git a/datafusion/physical-plan/src/lib.rs b/datafusion/physical-plan/src/lib.rs index e1c8489655bf..cd2be33e86c1 100644 --- a/datafusion/physical-plan/src/lib.rs +++ b/datafusion/physical-plan/src/lib.rs @@ -117,7 +117,19 @@ pub mod udaf { /// [`required_input_ordering`]: ExecutionPlan::required_input_ordering pub trait ExecutionPlan: Debug + DisplayAs + Send + Sync { /// Short name for the ExecutionPlan, such as 'ParquetExec'. - fn name(&self) -> &'static str { + fn name(&self) -> &'static str + where + Self: Sized, + { + Self::static_name() + } + + /// Short name for the ExecutionPlan, such as 'ParquetExec'. + /// Like [`name`](ExecutionPlan::name) but can be called without an instance. + fn static_name() -> &'static str + where + Self: Sized, + { let full_name = std::any::type_name::(); let maybe_start_idx = full_name.rfind(':'); match maybe_start_idx { @@ -125,6 +137,7 @@ pub trait ExecutionPlan: Debug + DisplayAs + Send + Sync { None => "UNKNOWN", } } + /// Returns the execution plan as [`Any`] so that it can be /// downcast to a specific implementation. fn as_any(&self) -> &dyn Any; @@ -873,7 +886,10 @@ mod tests { } impl ExecutionPlan for RenamedEmptyExec { - fn name(&self) -> &'static str { + fn static_name() -> &'static str + where + Self: Sized, + { "MyRenamedEmptyExec" } @@ -918,6 +934,7 @@ mod tests { let schema2 = Arc::new(Schema::empty()); let renamed_exec = RenamedEmptyExec::new(schema2); assert_eq!(renamed_exec.name(), "MyRenamedEmptyExec"); + assert_eq!(RenamedEmptyExec::static_name(), "MyRenamedEmptyExec"); } } diff --git a/datafusion/physical-plan/src/repartition/distributor_channels.rs b/datafusion/physical-plan/src/repartition/distributor_channels.rs index bad923ce9e82..675d26bbfb9f 100644 --- a/datafusion/physical-plan/src/repartition/distributor_channels.rs +++ b/datafusion/physical-plan/src/repartition/distributor_channels.rs @@ -474,7 +474,7 @@ type SharedGate = Arc; #[cfg(test)] mod tests { - use std::sync::atomic::{AtomicBool, Ordering}; + use std::sync::atomic::AtomicBool; use futures::{task::ArcWake, FutureExt};