datafusion_functions/
planner.rs1use datafusion_common::Result;
21use datafusion_expr::{
22 expr::ScalarFunction,
23 planner::{ExprPlanner, PlannerResult},
24 Expr,
25};
26
27#[derive(Default, Debug)]
28pub struct UserDefinedFunctionPlanner;
29
30impl ExprPlanner for UserDefinedFunctionPlanner {
31 #[cfg(feature = "datetime_expressions")]
32 fn plan_extract(&self, args: Vec<Expr>) -> Result<PlannerResult<Vec<Expr>>> {
33 Ok(PlannerResult::Planned(Expr::ScalarFunction(
34 ScalarFunction::new_udf(crate::datetime::date_part(), args),
35 )))
36 }
37
38 #[cfg(feature = "unicode_expressions")]
39 fn plan_position(&self, args: Vec<Expr>) -> Result<PlannerResult<Vec<Expr>>> {
40 Ok(PlannerResult::Planned(Expr::ScalarFunction(
41 ScalarFunction::new_udf(crate::unicode::strpos(), args),
42 )))
43 }
44
45 #[cfg(feature = "unicode_expressions")]
46 fn plan_substring(&self, args: Vec<Expr>) -> Result<PlannerResult<Vec<Expr>>> {
47 Ok(PlannerResult::Planned(Expr::ScalarFunction(
48 ScalarFunction::new_udf(crate::unicode::substr(), args),
49 )))
50 }
51}