This is an automated email from the ASF dual-hosted git repository.

alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new ad3e00812a Issue-9862 - move Cbrt, Cos, Cosh, Degrees to 
datafusion-functions (#9938)
ad3e00812a is described below

commit ad3e00812ad41ee2b80bb89ecb7073564e37df96
Author: Eren Avsarogullari <[email protected]>
AuthorDate: Thu Apr 4 09:27:02 2024 -0700

    Issue-9862 - move Cbrt, Cos, Cosh, Degrees to datafusion-functions (#9938)
---
 datafusion/expr/src/built_in_function.rs         | 28 +-----------------------
 datafusion/expr/src/expr_fn.rs                   |  8 -------
 datafusion/expr/src/signature.rs                 |  3 +--
 datafusion/functions/src/math/mod.rs             | 11 +++++++++-
 datafusion/physical-expr/src/functions.rs        |  4 ----
 datafusion/physical-expr/src/math_expressions.rs |  4 ----
 datafusion/proto/proto/datafusion.proto          | 10 ++++-----
 datafusion/proto/src/generated/pbjson.rs         | 12 ----------
 datafusion/proto/src/generated/prost.rs          | 18 +++++----------
 datafusion/proto/src/logical_plan/from_proto.rs  | 13 +----------
 datafusion/proto/src/logical_plan/to_proto.rs    |  4 ----
 11 files changed, 23 insertions(+), 92 deletions(-)

diff --git a/datafusion/expr/src/built_in_function.rs 
b/datafusion/expr/src/built_in_function.rs
index 744192e9a3..dc1fc98a5c 100644
--- a/datafusion/expr/src/built_in_function.rs
+++ b/datafusion/expr/src/built_in_function.rs
@@ -37,18 +37,10 @@ use strum_macros::EnumIter;
 #[derive(Debug, Clone, PartialEq, Eq, Hash, EnumIter, Copy)]
 pub enum BuiltinScalarFunction {
     // math functions
-    /// cbrt
-    Cbrt,
     /// ceil
     Ceil,
     /// coalesce
     Coalesce,
-    /// cos
-    Cos,
-    /// cos
-    Cosh,
-    /// degrees
-    Degrees,
     /// exp
     Exp,
     /// factorial
@@ -141,9 +133,6 @@ impl BuiltinScalarFunction {
             // Immutable scalar builtins
             BuiltinScalarFunction::Ceil => Volatility::Immutable,
             BuiltinScalarFunction::Coalesce => Volatility::Immutable,
-            BuiltinScalarFunction::Cos => Volatility::Immutable,
-            BuiltinScalarFunction::Cosh => Volatility::Immutable,
-            BuiltinScalarFunction::Degrees => Volatility::Immutable,
             BuiltinScalarFunction::Exp => Volatility::Immutable,
             BuiltinScalarFunction::Factorial => Volatility::Immutable,
             BuiltinScalarFunction::Floor => Volatility::Immutable,
@@ -155,7 +144,6 @@ impl BuiltinScalarFunction {
             BuiltinScalarFunction::Pi => Volatility::Immutable,
             BuiltinScalarFunction::Power => Volatility::Immutable,
             BuiltinScalarFunction::Round => Volatility::Immutable,
-            BuiltinScalarFunction::Cbrt => Volatility::Immutable,
             BuiltinScalarFunction::Cot => Volatility::Immutable,
             BuiltinScalarFunction::Trunc => Volatility::Immutable,
             BuiltinScalarFunction::Concat => Volatility::Immutable,
@@ -221,13 +209,9 @@ impl BuiltinScalarFunction {
             BuiltinScalarFunction::Iszero => Ok(Boolean),
 
             BuiltinScalarFunction::Ceil
-            | BuiltinScalarFunction::Cos
-            | BuiltinScalarFunction::Cosh
-            | BuiltinScalarFunction::Degrees
             | BuiltinScalarFunction::Exp
             | BuiltinScalarFunction::Floor
             | BuiltinScalarFunction::Round
-            | BuiltinScalarFunction::Cbrt
             | BuiltinScalarFunction::Trunc
             | BuiltinScalarFunction::Cot => match input_expr_types[0] {
                 Float32 => Ok(Float32),
@@ -308,11 +292,7 @@ impl BuiltinScalarFunction {
             BuiltinScalarFunction::Gcd | BuiltinScalarFunction::Lcm => {
                 Signature::uniform(2, vec![Int64], self.volatility())
             }
-            BuiltinScalarFunction::Cbrt
-            | BuiltinScalarFunction::Ceil
-            | BuiltinScalarFunction::Cos
-            | BuiltinScalarFunction::Cosh
-            | BuiltinScalarFunction::Degrees
+            BuiltinScalarFunction::Ceil
             | BuiltinScalarFunction::Exp
             | BuiltinScalarFunction::Floor
             | BuiltinScalarFunction::Cot => {
@@ -337,12 +317,10 @@ impl BuiltinScalarFunction {
         if matches!(
             &self,
             BuiltinScalarFunction::Ceil
-                | BuiltinScalarFunction::Degrees
                 | BuiltinScalarFunction::Exp
                 | BuiltinScalarFunction::Factorial
                 | BuiltinScalarFunction::Floor
                 | BuiltinScalarFunction::Round
-                | BuiltinScalarFunction::Cbrt
                 | BuiltinScalarFunction::Trunc
                 | BuiltinScalarFunction::Pi
         ) {
@@ -357,12 +335,8 @@ impl BuiltinScalarFunction {
     /// Returns all names that can be used to call this function
     pub fn aliases(&self) -> &'static [&'static str] {
         match self {
-            BuiltinScalarFunction::Cbrt => &["cbrt"],
             BuiltinScalarFunction::Ceil => &["ceil"],
-            BuiltinScalarFunction::Cos => &["cos"],
             BuiltinScalarFunction::Cot => &["cot"],
-            BuiltinScalarFunction::Cosh => &["cosh"],
-            BuiltinScalarFunction::Degrees => &["degrees"],
             BuiltinScalarFunction::Exp => &["exp"],
             BuiltinScalarFunction::Factorial => &["factorial"],
             BuiltinScalarFunction::Floor => &["floor"],
diff --git a/datafusion/expr/src/expr_fn.rs b/datafusion/expr/src/expr_fn.rs
index 5294ca7545..a1235a093d 100644
--- a/datafusion/expr/src/expr_fn.rs
+++ b/datafusion/expr/src/expr_fn.rs
@@ -536,10 +536,7 @@ macro_rules! nary_scalar_expr {
 // generate methods for creating the supported unary/binary expressions
 
 // math functions
-scalar_expr!(Cbrt, cbrt, num, "cube root of a number");
-scalar_expr!(Cos, cos, num, "cosine of a number");
 scalar_expr!(Cot, cot, num, "cotangent of a number");
-scalar_expr!(Cosh, cosh, num, "hyperbolic cosine of a number");
 scalar_expr!(Factorial, factorial, num, "factorial");
 scalar_expr!(
     Floor,
@@ -553,7 +550,6 @@ scalar_expr!(
     num,
     "nearest integer greater than or equal to argument"
 );
-scalar_expr!(Degrees, degrees, num, "converts radians to degrees");
 nary_scalar_expr!(Round, round, "round to nearest integer");
 nary_scalar_expr!(
     Trunc,
@@ -1060,14 +1056,10 @@ mod test {
 
     #[test]
     fn scalar_function_definitions() {
-        test_unary_scalar_expr!(Cbrt, cbrt);
-        test_unary_scalar_expr!(Cos, cos);
         test_unary_scalar_expr!(Cot, cot);
-        test_unary_scalar_expr!(Cosh, cosh);
         test_unary_scalar_expr!(Factorial, factorial);
         test_unary_scalar_expr!(Floor, floor);
         test_unary_scalar_expr!(Ceil, ceil);
-        test_unary_scalar_expr!(Degrees, degrees);
         test_nary_scalar_expr!(Round, round, input);
         test_nary_scalar_expr!(Round, round, input, decimal_places);
         test_nary_scalar_expr!(Trunc, trunc, num);
diff --git a/datafusion/expr/src/signature.rs b/datafusion/expr/src/signature.rs
index 0d65c068c4..89f456f337 100644
--- a/datafusion/expr/src/signature.rs
+++ b/datafusion/expr/src/signature.rs
@@ -39,8 +39,7 @@ pub const FIXED_SIZE_LIST_WILDCARD: i32 = i32::MIN;
 #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
 pub enum Volatility {
     /// An immutable function will always return the same output when given 
the same
-    /// input. An example of this is [super::BuiltinScalarFunction::Cos]. 
DataFusion
-    /// will attempt to inline immutable functions during planning.
+    /// input. DataFusion will attempt to inline immutable functions during 
planning.
     Immutable,
     /// A stable function may return different values given the same input 
across different
     /// queries but must return the same value for a given input within a 
query. An example of
diff --git a/datafusion/functions/src/math/mod.rs 
b/datafusion/functions/src/math/mod.rs
index a3ec2e3b90..f241c8b325 100644
--- a/datafusion/functions/src/math/mod.rs
+++ b/datafusion/functions/src/math/mod.rs
@@ -45,6 +45,11 @@ make_math_unary_udf!(SinFunc, SIN, sin, sin, None);
 make_math_unary_udf!(SinhFunc, SINH, sinh, sinh, None);
 make_math_unary_udf!(SqrtFunc, SQRT, sqrt, sqrt, None);
 
+make_math_unary_udf!(CbrtFunc, CBRT, cbrt, cbrt, None);
+make_math_unary_udf!(CosFunc, COS, cos, cos, None);
+make_math_unary_udf!(CoshFunc, COSH, cosh, cosh, None);
+make_math_unary_udf!(DegreesFunc, DEGREES, degrees, to_degrees, None);
+
 // Export the functions out of this package, both as expr_fn as well as a list 
of functions
 export_functions!(
     (
@@ -77,5 +82,9 @@ export_functions!(
     (signum, num, "sign of the argument (-1, 0, +1)"),
     (sin, num, "sine"),
     (sinh, num, "hyperbolic sine"),
-    (sqrt, num, "square root of a number")
+    (sqrt, num, "square root of a number"),
+    (cbrt, num, "cube root of a number"),
+    (cos, num, "cosine"),
+    (cosh, num, "hyperbolic cosine"),
+    (degrees, num, "converts radians to degrees")
 );
diff --git a/datafusion/physical-expr/src/functions.rs 
b/datafusion/physical-expr/src/functions.rs
index f201deb50f..770d918432 100644
--- a/datafusion/physical-expr/src/functions.rs
+++ b/datafusion/physical-expr/src/functions.rs
@@ -180,9 +180,6 @@ pub fn create_physical_fun(
     Ok(match fun {
         // math functions
         BuiltinScalarFunction::Ceil => Arc::new(math_expressions::ceil),
-        BuiltinScalarFunction::Cos => Arc::new(math_expressions::cos),
-        BuiltinScalarFunction::Cosh => Arc::new(math_expressions::cosh),
-        BuiltinScalarFunction::Degrees => 
Arc::new(math_expressions::to_degrees),
         BuiltinScalarFunction::Exp => Arc::new(math_expressions::exp),
         BuiltinScalarFunction::Factorial => {
             Arc::new(|args| 
make_scalar_function_inner(math_expressions::factorial)(args))
@@ -204,7 +201,6 @@ pub fn create_physical_fun(
         BuiltinScalarFunction::Round => {
             Arc::new(|args| 
make_scalar_function_inner(math_expressions::round)(args))
         }
-        BuiltinScalarFunction::Cbrt => Arc::new(math_expressions::cbrt),
         BuiltinScalarFunction::Trunc => {
             Arc::new(|args| 
make_scalar_function_inner(math_expressions::trunc)(args))
         }
diff --git a/datafusion/physical-expr/src/math_expressions.rs 
b/datafusion/physical-expr/src/math_expressions.rs
index acccb9cb3c..f8244ad952 100644
--- a/datafusion/physical-expr/src/math_expressions.rs
+++ b/datafusion/physical-expr/src/math_expressions.rs
@@ -155,9 +155,6 @@ macro_rules! make_function_scalar_inputs_return_type {
     }};
 }
 
-math_unary_function!("cbrt", cbrt);
-math_unary_function!("cos", cos);
-math_unary_function!("cosh", cosh);
 math_unary_function!("asin", asin);
 math_unary_function!("acos", acos);
 math_unary_function!("atan", atan);
@@ -170,7 +167,6 @@ math_unary_function!("exp", exp);
 math_unary_function!("ln", ln);
 math_unary_function!("log2", log2);
 math_unary_function!("log10", log10);
-math_unary_function!("degrees", to_degrees);
 
 /// Factorial SQL function
 pub fn factorial(args: &[ArrayRef]) -> Result<ArrayRef> {
diff --git a/datafusion/proto/proto/datafusion.proto 
b/datafusion/proto/proto/datafusion.proto
index 22a73aff18..6eb4a6b109 100644
--- a/datafusion/proto/proto/datafusion.proto
+++ b/datafusion/proto/proto/datafusion.proto
@@ -547,7 +547,7 @@ enum ScalarFunction {
   // 3 was Atan
   // 4 was Ascii
   Ceil = 5;
-  Cos = 6;
+  // 6 was Cos
   // 7 was Digest
   Exp = 8;
   Floor = 9;
@@ -614,15 +614,15 @@ enum ScalarFunction {
   // 70 was CurrentDate
   // 71 was CurrentTime
   // 72 was Uuid
-  Cbrt = 73;
+  // 73 was Cbrt
   // 74 Acosh
   // 75 was Asinh
   // 76 was Atanh
   // 77 was Sinh
-  Cosh = 78;
-  // Tanh = 79;
+  // 78 was Cosh
+  // Tanh = 79
   Pi = 80;
-  Degrees = 81;
+  // 81 was Degrees
   // 82 was Radians
   Factorial = 83;
   Lcm = 84;
diff --git a/datafusion/proto/src/generated/pbjson.rs 
b/datafusion/proto/src/generated/pbjson.rs
index aafb5b535b..658f06cfc1 100644
--- a/datafusion/proto/src/generated/pbjson.rs
+++ b/datafusion/proto/src/generated/pbjson.rs
@@ -22915,7 +22915,6 @@ impl serde::Serialize for ScalarFunction {
         let variant = match self {
             Self::Unknown => "unknown",
             Self::Ceil => "Ceil",
-            Self::Cos => "Cos",
             Self::Exp => "Exp",
             Self::Floor => "Floor",
             Self::Log => "Log",
@@ -22927,10 +22926,7 @@ impl serde::Serialize for ScalarFunction {
             Self::Random => "Random",
             Self::Coalesce => "Coalesce",
             Self::Power => "Power",
-            Self::Cbrt => "Cbrt",
-            Self::Cosh => "Cosh",
             Self::Pi => "Pi",
-            Self::Degrees => "Degrees",
             Self::Factorial => "Factorial",
             Self::Lcm => "Lcm",
             Self::Gcd => "Gcd",
@@ -22951,7 +22947,6 @@ impl<'de> serde::Deserialize<'de> for ScalarFunction {
         const FIELDS: &[&str] = &[
             "unknown",
             "Ceil",
-            "Cos",
             "Exp",
             "Floor",
             "Log",
@@ -22963,10 +22958,7 @@ impl<'de> serde::Deserialize<'de> for ScalarFunction {
             "Random",
             "Coalesce",
             "Power",
-            "Cbrt",
-            "Cosh",
             "Pi",
-            "Degrees",
             "Factorial",
             "Lcm",
             "Gcd",
@@ -23016,7 +23008,6 @@ impl<'de> serde::Deserialize<'de> for ScalarFunction {
                 match value {
                     "unknown" => Ok(ScalarFunction::Unknown),
                     "Ceil" => Ok(ScalarFunction::Ceil),
-                    "Cos" => Ok(ScalarFunction::Cos),
                     "Exp" => Ok(ScalarFunction::Exp),
                     "Floor" => Ok(ScalarFunction::Floor),
                     "Log" => Ok(ScalarFunction::Log),
@@ -23028,10 +23019,7 @@ impl<'de> serde::Deserialize<'de> for ScalarFunction {
                     "Random" => Ok(ScalarFunction::Random),
                     "Coalesce" => Ok(ScalarFunction::Coalesce),
                     "Power" => Ok(ScalarFunction::Power),
-                    "Cbrt" => Ok(ScalarFunction::Cbrt),
-                    "Cosh" => Ok(ScalarFunction::Cosh),
                     "Pi" => Ok(ScalarFunction::Pi),
-                    "Degrees" => Ok(ScalarFunction::Degrees),
                     "Factorial" => Ok(ScalarFunction::Factorial),
                     "Lcm" => Ok(ScalarFunction::Lcm),
                     "Gcd" => Ok(ScalarFunction::Gcd),
diff --git a/datafusion/proto/src/generated/prost.rs 
b/datafusion/proto/src/generated/prost.rs
index 81f390fff1..ea13bac0f6 100644
--- a/datafusion/proto/src/generated/prost.rs
+++ b/datafusion/proto/src/generated/prost.rs
@@ -2846,7 +2846,7 @@ pub enum ScalarFunction {
     /// 3 was Atan
     /// 4 was Ascii
     Ceil = 5,
-    Cos = 6,
+    /// 6 was Cos
     /// 7 was Digest
     Exp = 8,
     Floor = 9,
@@ -2913,15 +2913,15 @@ pub enum ScalarFunction {
     /// 70 was CurrentDate
     /// 71 was CurrentTime
     /// 72 was Uuid
-    Cbrt = 73,
+    /// 73 was Cbrt
     /// 74 Acosh
     /// 75 was Asinh
     /// 76 was Atanh
     /// 77 was Sinh
-    Cosh = 78,
-    /// Tanh = 79;
+    /// 78 was Cosh
+    /// Tanh = 79
     Pi = 80,
-    Degrees = 81,
+    /// 81 was Degrees
     /// 82 was Radians
     Factorial = 83,
     Lcm = 84,
@@ -2988,7 +2988,6 @@ impl ScalarFunction {
         match self {
             ScalarFunction::Unknown => "unknown",
             ScalarFunction::Ceil => "Ceil",
-            ScalarFunction::Cos => "Cos",
             ScalarFunction::Exp => "Exp",
             ScalarFunction::Floor => "Floor",
             ScalarFunction::Log => "Log",
@@ -3000,10 +2999,7 @@ impl ScalarFunction {
             ScalarFunction::Random => "Random",
             ScalarFunction::Coalesce => "Coalesce",
             ScalarFunction::Power => "Power",
-            ScalarFunction::Cbrt => "Cbrt",
-            ScalarFunction::Cosh => "Cosh",
             ScalarFunction::Pi => "Pi",
-            ScalarFunction::Degrees => "Degrees",
             ScalarFunction::Factorial => "Factorial",
             ScalarFunction::Lcm => "Lcm",
             ScalarFunction::Gcd => "Gcd",
@@ -3018,7 +3014,6 @@ impl ScalarFunction {
         match value {
             "unknown" => Some(Self::Unknown),
             "Ceil" => Some(Self::Ceil),
-            "Cos" => Some(Self::Cos),
             "Exp" => Some(Self::Exp),
             "Floor" => Some(Self::Floor),
             "Log" => Some(Self::Log),
@@ -3030,10 +3025,7 @@ impl ScalarFunction {
             "Random" => Some(Self::Random),
             "Coalesce" => Some(Self::Coalesce),
             "Power" => Some(Self::Power),
-            "Cbrt" => Some(Self::Cbrt),
-            "Cosh" => Some(Self::Cosh),
             "Pi" => Some(Self::Pi),
-            "Degrees" => Some(Self::Degrees),
             "Factorial" => Some(Self::Factorial),
             "Lcm" => Some(Self::Lcm),
             "Gcd" => Some(Self::Gcd),
diff --git a/datafusion/proto/src/logical_plan/from_proto.rs 
b/datafusion/proto/src/logical_plan/from_proto.rs
index 6a536b2fa3..30d01cc758 100644
--- a/datafusion/proto/src/logical_plan/from_proto.rs
+++ b/datafusion/proto/src/logical_plan/from_proto.rs
@@ -37,8 +37,7 @@ use datafusion_expr::expr::Unnest;
 use datafusion_expr::expr::{Alias, Placeholder};
 use datafusion_expr::window_frame::{check_window_frame, 
regularize_window_order_by};
 use datafusion_expr::{
-    cbrt, ceil, coalesce, concat_expr, concat_ws_expr, cos, cosh, cot, degrees,
-    ends_with, exp,
+    ceil, coalesce, concat_expr, concat_ws_expr, cot, ends_with, exp,
     expr::{self, InList, Sort, WindowFunction},
     factorial, floor, gcd, initcap, iszero, lcm, log,
     logical_plan::{PlanType, StringifiedPlan},
@@ -421,13 +420,9 @@ impl From<&protobuf::ScalarFunction> for 
BuiltinScalarFunction {
         use protobuf::ScalarFunction;
         match f {
             ScalarFunction::Unknown => todo!(),
-            ScalarFunction::Cbrt => Self::Cbrt,
-            ScalarFunction::Cos => Self::Cos,
             ScalarFunction::Cot => Self::Cot,
-            ScalarFunction::Cosh => Self::Cosh,
             ScalarFunction::Exp => Self::Exp,
             ScalarFunction::Log => Self::Log,
-            ScalarFunction::Degrees => Self::Degrees,
             ScalarFunction::Factorial => Self::Factorial,
             ScalarFunction::Gcd => Self::Gcd,
             ScalarFunction::Lcm => Self::Lcm,
@@ -1306,13 +1301,7 @@ pub fn parse_expr(
 
             match scalar_function {
                 ScalarFunction::Unknown => Err(proto_error("Unknown scalar 
function")),
-                ScalarFunction::Cbrt => Ok(cbrt(parse_expr(&args[0], registry, 
codec)?)),
-                ScalarFunction::Cos => Ok(cos(parse_expr(&args[0], registry, 
codec)?)),
-                ScalarFunction::Cosh => Ok(cosh(parse_expr(&args[0], registry, 
codec)?)),
                 ScalarFunction::Exp => Ok(exp(parse_expr(&args[0], registry, 
codec)?)),
-                ScalarFunction::Degrees => {
-                    Ok(degrees(parse_expr(&args[0], registry, codec)?))
-                }
                 ScalarFunction::Floor => {
                     Ok(floor(parse_expr(&args[0], registry, codec)?))
                 }
diff --git a/datafusion/proto/src/logical_plan/to_proto.rs 
b/datafusion/proto/src/logical_plan/to_proto.rs
index ab488f3f55..4382ee0ff0 100644
--- a/datafusion/proto/src/logical_plan/to_proto.rs
+++ b/datafusion/proto/src/logical_plan/to_proto.rs
@@ -1408,16 +1408,12 @@ impl TryFrom<&BuiltinScalarFunction> for 
protobuf::ScalarFunction {
 
     fn try_from(scalar: &BuiltinScalarFunction) -> Result<Self, Self::Error> {
         let scalar_function = match scalar {
-            BuiltinScalarFunction::Cbrt => Self::Cbrt,
-            BuiltinScalarFunction::Cos => Self::Cos,
             BuiltinScalarFunction::Cot => Self::Cot,
-            BuiltinScalarFunction::Cosh => Self::Cosh,
             BuiltinScalarFunction::Exp => Self::Exp,
             BuiltinScalarFunction::Factorial => Self::Factorial,
             BuiltinScalarFunction::Gcd => Self::Gcd,
             BuiltinScalarFunction::Lcm => Self::Lcm,
             BuiltinScalarFunction::Log => Self::Log,
-            BuiltinScalarFunction::Degrees => Self::Degrees,
             BuiltinScalarFunction::Floor => Self::Floor,
             BuiltinScalarFunction::Ceil => Self::Ceil,
             BuiltinScalarFunction::Round => Self::Round,

Reply via email to