From 7e4c3d4ab24a62dbeb381bb1f4f6b8b8fde04c72 Mon Sep 17 00:00:00 2001 From: Ruihang Xia Date: Sat, 27 Apr 2024 22:34:28 +0800 Subject: [PATCH 1/2] feat: add static_name() to ExecutionPlan Signed-off-by: Ruihang Xia --- datafusion/physical-plan/src/lib.rs | 20 +++++++++++++++++-- .../src/repartition/distributor_channels.rs | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/datafusion/physical-plan/src/lib.rs b/datafusion/physical-plan/src/lib.rs index e1c8489655bf..a1b6a5a1f4ab 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" } 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}; From fbb5f4acf7ce3c936c9af783aad0e19328c2e1aa Mon Sep 17 00:00:00 2001 From: Ruihang Xia Date: Sun, 28 Apr 2024 11:30:43 +0800 Subject: [PATCH 2/2] add test to invoke from type Signed-off-by: Ruihang Xia --- datafusion/physical-plan/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/datafusion/physical-plan/src/lib.rs b/datafusion/physical-plan/src/lib.rs index a1b6a5a1f4ab..cd2be33e86c1 100644 --- a/datafusion/physical-plan/src/lib.rs +++ b/datafusion/physical-plan/src/lib.rs @@ -934,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"); } }