This is an automated email from the ASF dual-hosted git repository. gabotechs pushed a commit to branch wire-up-with-new-state-data-source in repository https://gitbox.apache.org/repos/asf/datafusion.git
commit 365e3e742f5217310f2d319e1778a4285b44fa66 Author: Gabriel Musat Mestre <[email protected]> AuthorDate: Thu Mar 5 08:47:18 2026 +0100 Wire up with_new_state with DataSource --- datafusion/datasource/src/source.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/datafusion/datasource/src/source.rs b/datafusion/datasource/src/source.rs index bdb45e8e3b..deea108139 100644 --- a/datafusion/datasource/src/source.rs +++ b/datafusion/datasource/src/source.rs @@ -228,6 +228,22 @@ pub trait DataSource: Send + Sync + Debug { &self, f: &mut dyn FnMut(&dyn PhysicalExpr) -> Result<TreeNodeRecursion>, ) -> Result<TreeNodeRecursion>; + + /// Injects arbitrary run-time state into this DataSource, returning a new instance + /// that incorporates that state *if* it is relevant to the concrete DataSource implementation. + /// + /// This is a generic entry point: the `state` can be any type wrapped in + /// `Arc<dyn Any + Send + Sync>`. A data source that cares about the state should + /// down-cast it to the concrete type it expects and, if successful, return a + /// modified copy of itself that captures the provided value. If the state is + /// not applicable, the default behaviour is to return `None` so that parent + /// nodes can continue propagating the attempt further down the plan tree. + fn with_new_state( + &self, + _state: Arc<dyn Any + Send + Sync>, + ) -> Option<Arc<dyn DataSource>> { + None + } } /// [`ExecutionPlan`] that reads one or more files @@ -432,6 +448,18 @@ impl ExecutionPlan for DataSourceExec { as Arc<dyn ExecutionPlan> }) } + + fn with_new_state( + &self, + state: Arc<dyn Any + Send + Sync>, + ) -> Option<Arc<dyn ExecutionPlan>> { + self.data_source + .with_new_state(state) + .map(|new_data_source| { + Arc::new(self.clone().with_data_source(new_data_source)) + as Arc<dyn ExecutionPlan> + }) + } } impl DataSourceExec { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
