diff --git a/datafusion/core/src/execution/session_state.rs b/datafusion/core/src/execution/session_state.rs index ad557b12255c..d056b91c2747 100644 --- a/datafusion/core/src/execution/session_state.rs +++ b/datafusion/core/src/execution/session_state.rs @@ -238,10 +238,11 @@ impl SessionState { Arc::new(functions_array::planner::ArrayFunctionPlanner), #[cfg(feature = "array_expressions")] Arc::new(functions_array::planner::FieldAccessPlanner), - #[cfg(feature = "datetime_expressions")] - Arc::new(functions::datetime::planner::ExtractPlanner), - #[cfg(feature = "unicode_expressions")] - Arc::new(functions::unicode::planner::PositionPlanner), + #[cfg(any( + feature = "datetime_expressions", + feature = "unicode_expressions" + ))] + Arc::new(functions::planner::UserDefinedFunctionPlanner), ]; let mut new_self = SessionState { diff --git a/datafusion/functions/src/datetime/mod.rs b/datafusion/functions/src/datetime/mod.rs index 8365a38f41f2..9c2f80856bf8 100644 --- a/datafusion/functions/src/datetime/mod.rs +++ b/datafusion/functions/src/datetime/mod.rs @@ -30,7 +30,6 @@ pub mod date_trunc; pub mod from_unixtime; pub mod make_date; pub mod now; -pub mod planner; pub mod to_char; pub mod to_date; pub mod to_timestamp; diff --git a/datafusion/functions/src/lib.rs b/datafusion/functions/src/lib.rs index 4bc24931d06b..433a4f90d95b 100644 --- a/datafusion/functions/src/lib.rs +++ b/datafusion/functions/src/lib.rs @@ -130,6 +130,9 @@ make_stub_package!(crypto, "crypto_expressions"); pub mod unicode; make_stub_package!(unicode, "unicode_expressions"); +#[cfg(any(feature = "datetime_expressions", feature = "unicode_expressions"))] +pub mod planner; + mod utils; /// Fluent-style API for creating `Expr`s diff --git a/datafusion/functions/src/datetime/planner.rs b/datafusion/functions/src/planner.rs similarity index 71% rename from datafusion/functions/src/datetime/planner.rs rename to datafusion/functions/src/planner.rs index 4265ce42a51a..b00d5cf60810 100644 --- a/datafusion/functions/src/datetime/planner.rs +++ b/datafusion/functions/src/planner.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -//! SQL planning extensions like [`ExtractPlanner`] +//! SQL planning extensions like [`UserDefinedFunctionPlanner`] use datafusion_common::Result; use datafusion_expr::{ @@ -25,12 +25,20 @@ use datafusion_expr::{ }; #[derive(Default)] -pub struct ExtractPlanner; +pub struct UserDefinedFunctionPlanner; -impl UserDefinedSQLPlanner for ExtractPlanner { +impl UserDefinedSQLPlanner for UserDefinedFunctionPlanner { + #[cfg(feature = "datetime_expressions")] fn plan_extract(&self, args: Vec) -> Result>> { Ok(PlannerResult::Planned(Expr::ScalarFunction( ScalarFunction::new_udf(crate::datetime::date_part(), args), ))) } + + #[cfg(feature = "unicode_expressions")] + fn plan_position(&self, args: Vec) -> Result>> { + Ok(PlannerResult::Planned(Expr::ScalarFunction( + ScalarFunction::new_udf(crate::unicode::strpos(), args), + ))) + } } diff --git a/datafusion/functions/src/unicode/mod.rs b/datafusion/functions/src/unicode/mod.rs index a391b8ba11dc..9e8c07cd36ed 100644 --- a/datafusion/functions/src/unicode/mod.rs +++ b/datafusion/functions/src/unicode/mod.rs @@ -25,7 +25,6 @@ pub mod character_length; pub mod find_in_set; pub mod left; pub mod lpad; -pub mod planner; pub mod reverse; pub mod right; pub mod rpad; diff --git a/datafusion/functions/src/unicode/planner.rs b/datafusion/functions/src/unicode/planner.rs deleted file mode 100644 index 4d6f73321b4a..000000000000 --- a/datafusion/functions/src/unicode/planner.rs +++ /dev/null @@ -1,36 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -//! SQL planning extensions like [`PositionPlanner`] - -use datafusion_common::Result; -use datafusion_expr::{ - expr::ScalarFunction, - planner::{PlannerResult, UserDefinedSQLPlanner}, - Expr, -}; - -#[derive(Default)] -pub struct PositionPlanner; - -impl UserDefinedSQLPlanner for PositionPlanner { - fn plan_position(&self, args: Vec) -> Result>> { - Ok(PlannerResult::Planned(Expr::ScalarFunction( - ScalarFunction::new_udf(crate::unicode::strpos(), args), - ))) - } -}