Skip to content

Commit 9f8ba6a

Browse files
authored
Add user_defined_sql_planners(..) to FunctionRegistry (#11296)
* Add user_defined_sql_planners(..) to FunctionRegistry * Adding simple test for user_defined_sql_planners * Renamed user_defined_sql_planners to expr_planners
1 parent e693ed7 commit 9f8ba6a

File tree

7 files changed

+43
-3
lines changed

7 files changed

+43
-3
lines changed

datafusion/core/src/execution/context/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,6 +1392,10 @@ impl FunctionRegistry for SessionContext {
13921392
self.state.write().register_function_rewrite(rewrite)
13931393
}
13941394

1395+
fn expr_planners(&self) -> Vec<Arc<dyn UserDefinedSQLPlanner>> {
1396+
self.state.read().expr_planners()
1397+
}
1398+
13951399
fn register_user_defined_sql_planner(
13961400
&mut self,
13971401
user_defined_sql_planner: Arc<dyn UserDefinedSQLPlanner>,

datafusion/core/src/execution/session_state.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,6 +1183,10 @@ impl FunctionRegistry for SessionState {
11831183
Ok(())
11841184
}
11851185

1186+
fn expr_planners(&self) -> Vec<Arc<dyn UserDefinedSQLPlanner>> {
1187+
self.user_defined_sql_planners.clone()
1188+
}
1189+
11861190
fn register_user_defined_sql_planner(
11871191
&mut self,
11881192
user_defined_sql_planner: Arc<dyn UserDefinedSQLPlanner>,

datafusion/core/tests/user_defined/user_defined_scalar_functions.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,17 @@ async fn test_user_defined_functions_cast_to_i64() -> Result<()> {
571571
Ok(())
572572
}
573573

574+
#[tokio::test]
575+
async fn test_user_defined_sql_functions() -> Result<()> {
576+
let ctx = SessionContext::new();
577+
578+
let sql_planners = ctx.expr_planners();
579+
580+
assert!(!sql_planners.is_empty());
581+
582+
Ok(())
583+
}
584+
574585
#[tokio::test]
575586
async fn deregister_udf() -> Result<()> {
576587
let cast2i64 = ScalarUDF::from(CastToI64UDF::new());

datafusion/execution/src/task.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ use std::{
2020
sync::Arc,
2121
};
2222

23-
use datafusion_common::{plan_datafusion_err, DataFusionError, Result};
24-
use datafusion_expr::{AggregateUDF, ScalarUDF, WindowUDF};
25-
2623
use crate::{
2724
config::SessionConfig,
2825
memory_pool::MemoryPool,
2926
registry::FunctionRegistry,
3027
runtime_env::{RuntimeConfig, RuntimeEnv},
3128
};
29+
use datafusion_common::{plan_datafusion_err, DataFusionError, Result};
30+
use datafusion_expr::planner::UserDefinedSQLPlanner;
31+
use datafusion_expr::{AggregateUDF, ScalarUDF, WindowUDF};
3232

3333
/// Task Execution Context
3434
///
@@ -191,6 +191,10 @@ impl FunctionRegistry for TaskContext {
191191
});
192192
Ok(self.scalar_functions.insert(udf.name().into(), udf))
193193
}
194+
195+
fn expr_planners(&self) -> Vec<Arc<dyn UserDefinedSQLPlanner>> {
196+
vec![]
197+
}
194198
}
195199

196200
#[cfg(test)]

datafusion/expr/src/registry.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ pub trait FunctionRegistry {
110110
not_impl_err!("Registering FunctionRewrite")
111111
}
112112

113+
/// Set of all registered [`UserDefinedSQLPlanner`]s
114+
fn expr_planners(&self) -> Vec<Arc<dyn UserDefinedSQLPlanner>>;
115+
113116
/// Registers a new [`UserDefinedSQLPlanner`] with the registry.
114117
fn register_user_defined_sql_planner(
115118
&mut self,
@@ -192,4 +195,8 @@ impl FunctionRegistry for MemoryFunctionRegistry {
192195
fn register_udwf(&mut self, udaf: Arc<WindowUDF>) -> Result<Option<Arc<WindowUDF>>> {
193196
Ok(self.udwfs.insert(udaf.name().into(), udaf))
194197
}
198+
199+
fn expr_planners(&self) -> Vec<Arc<dyn UserDefinedSQLPlanner>> {
200+
vec![]
201+
}
195202
}

datafusion/proto/src/bytes/mod.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ use std::sync::Arc;
3939
use datafusion::execution::registry::FunctionRegistry;
4040
use datafusion::physical_plan::ExecutionPlan;
4141
use datafusion::prelude::SessionContext;
42+
use datafusion_expr::planner::UserDefinedSQLPlanner;
4243

4344
mod registry;
4445

@@ -165,6 +166,10 @@ impl Serializeable for Expr {
165166
"register_udwf called in Placeholder Registry!"
166167
)
167168
}
169+
170+
fn expr_planners(&self) -> Vec<Arc<dyn UserDefinedSQLPlanner>> {
171+
vec![]
172+
}
168173
}
169174
Expr::from_bytes_with_registry(&bytes, &PlaceHolderRegistry)?;
170175

datafusion/proto/src/bytes/registry.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use std::{collections::HashSet, sync::Arc};
2020
use datafusion::execution::registry::FunctionRegistry;
2121
use datafusion_common::plan_err;
2222
use datafusion_common::Result;
23+
use datafusion_expr::planner::UserDefinedSQLPlanner;
2324
use datafusion_expr::{AggregateUDF, ScalarUDF, WindowUDF};
2425

2526
/// A default [`FunctionRegistry`] registry that does not resolve any
@@ -54,4 +55,8 @@ impl FunctionRegistry for NoRegistry {
5455
fn register_udwf(&mut self, udwf: Arc<WindowUDF>) -> Result<Option<Arc<WindowUDF>>> {
5556
plan_err!("No function registry provided to deserialize, so can not deserialize User Defined Window Function '{}'", udwf.inner().name())
5657
}
58+
59+
fn expr_planners(&self) -> Vec<Arc<dyn UserDefinedSQLPlanner>> {
60+
vec![]
61+
}
5762
}

0 commit comments

Comments
 (0)