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 078aeb6b8a move Log2, Log10, Ln to datafusion-functions (#9869)
078aeb6b8a is described below

commit 078aeb6b8ade94689fc6c54143d4be9038929c4d
Author: Kunal Kundu <[email protected]>
AuthorDate: Sat Mar 30 18:33:26 2024 +0530

    move Log2, Log10, Ln to datafusion-functions (#9869)
    
    * move log2
    
    * move log10, ln
    
    * refactor log_b functions to use macro
    
    * update proto
---
 datafusion/expr/src/built_in_function.rs        | 21 ---------------------
 datafusion/expr/src/expr_fn.rs                  |  6 ------
 datafusion/functions/src/macros.rs              | 10 ++++++++--
 datafusion/functions/src/math/mod.rs            | 15 +++++++++++----
 datafusion/physical-expr/src/functions.rs       |  3 ---
 datafusion/proto/proto/datafusion.proto         |  6 +++---
 datafusion/proto/src/generated/pbjson.rs        |  9 ---------
 datafusion/proto/src/generated/prost.rs         | 12 +++---------
 datafusion/proto/src/logical_plan/from_proto.rs | 10 +---------
 datafusion/proto/src/logical_plan/to_proto.rs   |  3 ---
 10 files changed, 26 insertions(+), 69 deletions(-)

diff --git a/datafusion/expr/src/built_in_function.rs 
b/datafusion/expr/src/built_in_function.rs
index 423fc11c1d..f07e840275 100644
--- a/datafusion/expr/src/built_in_function.rs
+++ b/datafusion/expr/src/built_in_function.rs
@@ -71,14 +71,8 @@ pub enum BuiltinScalarFunction {
     Lcm,
     /// iszero
     Iszero,
-    /// ln, Natural logarithm
-    Ln,
     /// log, same as log10
     Log,
-    /// log10
-    Log10,
-    /// log2
-    Log2,
     /// nanvl
     Nanvl,
     /// pi
@@ -187,10 +181,7 @@ impl BuiltinScalarFunction {
             BuiltinScalarFunction::Gcd => Volatility::Immutable,
             BuiltinScalarFunction::Iszero => Volatility::Immutable,
             BuiltinScalarFunction::Lcm => Volatility::Immutable,
-            BuiltinScalarFunction::Ln => Volatility::Immutable,
             BuiltinScalarFunction::Log => Volatility::Immutable,
-            BuiltinScalarFunction::Log10 => Volatility::Immutable,
-            BuiltinScalarFunction::Log2 => Volatility::Immutable,
             BuiltinScalarFunction::Nanvl => Volatility::Immutable,
             BuiltinScalarFunction::Pi => Volatility::Immutable,
             BuiltinScalarFunction::Power => Volatility::Immutable,
@@ -292,9 +283,6 @@ impl BuiltinScalarFunction {
             | BuiltinScalarFunction::Degrees
             | BuiltinScalarFunction::Exp
             | BuiltinScalarFunction::Floor
-            | BuiltinScalarFunction::Ln
-            | BuiltinScalarFunction::Log10
-            | BuiltinScalarFunction::Log2
             | BuiltinScalarFunction::Radians
             | BuiltinScalarFunction::Round
             | BuiltinScalarFunction::Signum
@@ -412,9 +400,6 @@ impl BuiltinScalarFunction {
             | BuiltinScalarFunction::Degrees
             | BuiltinScalarFunction::Exp
             | BuiltinScalarFunction::Floor
-            | BuiltinScalarFunction::Ln
-            | BuiltinScalarFunction::Log10
-            | BuiltinScalarFunction::Log2
             | BuiltinScalarFunction::Radians
             | BuiltinScalarFunction::Signum
             | BuiltinScalarFunction::Sin
@@ -450,9 +435,6 @@ impl BuiltinScalarFunction {
                 | BuiltinScalarFunction::Exp
                 | BuiltinScalarFunction::Factorial
                 | BuiltinScalarFunction::Floor
-                | BuiltinScalarFunction::Ln
-                | BuiltinScalarFunction::Log10
-                | BuiltinScalarFunction::Log2
                 | BuiltinScalarFunction::Radians
                 | BuiltinScalarFunction::Round
                 | BuiltinScalarFunction::Signum
@@ -490,10 +472,7 @@ impl BuiltinScalarFunction {
             BuiltinScalarFunction::Gcd => &["gcd"],
             BuiltinScalarFunction::Iszero => &["iszero"],
             BuiltinScalarFunction::Lcm => &["lcm"],
-            BuiltinScalarFunction::Ln => &["ln"],
             BuiltinScalarFunction::Log => &["log"],
-            BuiltinScalarFunction::Log10 => &["log10"],
-            BuiltinScalarFunction::Log2 => &["log2"],
             BuiltinScalarFunction::Nanvl => &["nanvl"],
             BuiltinScalarFunction::Pi => &["pi"],
             BuiltinScalarFunction::Power => &["power", "pow"],
diff --git a/datafusion/expr/src/expr_fn.rs b/datafusion/expr/src/expr_fn.rs
index 09170ae639..e216e4e86d 100644
--- a/datafusion/expr/src/expr_fn.rs
+++ b/datafusion/expr/src/expr_fn.rs
@@ -570,9 +570,6 @@ scalar_expr!(Signum, signum, num, "sign of the argument 
(-1, 0, +1) ");
 scalar_expr!(Exp, exp, num, "exponential");
 scalar_expr!(Gcd, gcd, arg_1 arg_2, "greatest common divisor");
 scalar_expr!(Lcm, lcm, arg_1 arg_2, "least common multiple");
-scalar_expr!(Log2, log2, num, "base 2 logarithm of number");
-scalar_expr!(Log10, log10, num, "base 10 logarithm of number");
-scalar_expr!(Ln, ln, num, "natural logarithm (base e) of number");
 scalar_expr!(Power, power, base exponent, "`base` raised to the power of 
`exponent`");
 scalar_expr!(Atan2, atan2, y x, "inverse tangent of a division given in the 
argument");
 scalar_expr!(Log, log, base x, "logarithm of a `x` for a particular `base`");
@@ -1001,9 +998,6 @@ mod test {
         test_nary_scalar_expr!(Trunc, trunc, num, precision);
         test_unary_scalar_expr!(Signum, signum);
         test_unary_scalar_expr!(Exp, exp);
-        test_unary_scalar_expr!(Log2, log2);
-        test_unary_scalar_expr!(Log10, log10);
-        test_unary_scalar_expr!(Ln, ln);
         test_scalar_expr!(Atan2, atan2, y, x);
         test_scalar_expr!(Nanvl, nanvl, x, y);
         test_scalar_expr!(Iszero, iszero, input);
diff --git a/datafusion/functions/src/macros.rs 
b/datafusion/functions/src/macros.rs
index e735523df6..b23baeeacf 100644
--- a/datafusion/functions/src/macros.rs
+++ b/datafusion/functions/src/macros.rs
@@ -157,14 +157,16 @@ macro_rules! downcast_arg {
 /// $NAME: the name of the function
 /// $UNARY_FUNC: the unary function to apply to the argument
 macro_rules! make_math_unary_udf {
-    ($UDF:ident, $GNAME:ident, $NAME:ident, $UNARY_FUNC:ident) => {
+    ($UDF:ident, $GNAME:ident, $NAME:ident, $UNARY_FUNC:ident, 
$MONOTONICITY:expr) => {
         make_udf_function!($NAME::$UDF, $GNAME, $NAME);
 
         mod $NAME {
             use arrow::array::{ArrayRef, Float32Array, Float64Array};
             use arrow::datatypes::DataType;
             use datafusion_common::{exec_err, DataFusionError, Result};
-            use datafusion_expr::{ColumnarValue, ScalarUDFImpl, Signature, 
Volatility};
+            use datafusion_expr::{
+                ColumnarValue, FuncMonotonicity, ScalarUDFImpl, Signature, 
Volatility,
+            };
             use std::any::Any;
             use std::sync::Arc;
 
@@ -208,6 +210,10 @@ macro_rules! make_math_unary_udf {
                     }
                 }
 
+                fn monotonicity(&self) -> Result<Option<FuncMonotonicity>> {
+                    Ok($MONOTONICITY)
+                }
+
                 fn invoke(&self, args: &[ColumnarValue]) -> 
Result<ColumnarValue> {
                     let args = ColumnarValue::values_to_arrays(args)?;
 
diff --git a/datafusion/functions/src/math/mod.rs 
b/datafusion/functions/src/math/mod.rs
index 27deb7d684..3a4c1b1e87 100644
--- a/datafusion/functions/src/math/mod.rs
+++ b/datafusion/functions/src/math/mod.rs
@@ -24,10 +24,14 @@ mod nans;
 make_udf_function!(nans::IsNanFunc, ISNAN, isnan);
 make_udf_function!(abs::AbsFunc, ABS, abs);
 
-make_math_unary_udf!(TanhFunc, TANH, tanh, tanh);
-make_math_unary_udf!(AcosFunc, ACOS, acos, acos);
-make_math_unary_udf!(AsinFunc, ASIN, asin, asin);
-make_math_unary_udf!(TanFunc, TAN, tan, tan);
+make_math_unary_udf!(Log2Func, LOG2, log2, log2, Some(vec![Some(true)]));
+make_math_unary_udf!(Log10Func, LOG10, log10, log10, Some(vec![Some(true)]));
+make_math_unary_udf!(LnFunc, LN, ln, ln, Some(vec![Some(true)]));
+
+make_math_unary_udf!(TanhFunc, TANH, tanh, tanh, None);
+make_math_unary_udf!(AcosFunc, ACOS, acos, acos, None);
+make_math_unary_udf!(AsinFunc, ASIN, asin, asin, None);
+make_math_unary_udf!(TanFunc, TAN, tan, tan, None);
 
 // Export the functions out of this package, both as expr_fn as well as a list 
of functions
 export_functions!(
@@ -37,6 +41,9 @@ export_functions!(
         "returns true if a given number is +NaN or -NaN otherwise returns 
false"
     ),
     (abs, num, "returns the absolute value of a given number"),
+    (log2, num, "base 2 logarithm of a number"),
+    (log10, num, "base 10 logarithm of a number"),
+    (ln, num, "natural logarithm (base e) of a number"),
     (
         acos,
         num,
diff --git a/datafusion/physical-expr/src/functions.rs 
b/datafusion/physical-expr/src/functions.rs
index 513dd71d40..515511b15f 100644
--- a/datafusion/physical-expr/src/functions.rs
+++ b/datafusion/physical-expr/src/functions.rs
@@ -221,9 +221,6 @@ pub fn create_physical_fun(
         BuiltinScalarFunction::Lcm => {
             Arc::new(|args| 
make_scalar_function_inner(math_expressions::lcm)(args))
         }
-        BuiltinScalarFunction::Ln => Arc::new(math_expressions::ln),
-        BuiltinScalarFunction::Log10 => Arc::new(math_expressions::log10),
-        BuiltinScalarFunction::Log2 => Arc::new(math_expressions::log2),
         BuiltinScalarFunction::Nanvl => {
             Arc::new(|args| 
make_scalar_function_inner(math_expressions::nanvl)(args))
         }
diff --git a/datafusion/proto/proto/datafusion.proto 
b/datafusion/proto/proto/datafusion.proto
index 3a187eabe8..81451e40aa 100644
--- a/datafusion/proto/proto/datafusion.proto
+++ b/datafusion/proto/proto/datafusion.proto
@@ -551,10 +551,10 @@ enum ScalarFunction {
   // 7 was Digest
   Exp = 8;
   Floor = 9;
-  Ln = 10;
+  // 10 was Ln
   Log = 11;
-  Log10 = 12;
-  Log2 = 13;
+  // 12 was Log10
+  // 13 was Log2
   Round = 14;
   Signum = 15;
   Sin = 16;
diff --git a/datafusion/proto/src/generated/pbjson.rs 
b/datafusion/proto/src/generated/pbjson.rs
index 07b91b26d6..2949ab807e 100644
--- a/datafusion/proto/src/generated/pbjson.rs
+++ b/datafusion/proto/src/generated/pbjson.rs
@@ -22919,10 +22919,7 @@ impl serde::Serialize for ScalarFunction {
             Self::Cos => "Cos",
             Self::Exp => "Exp",
             Self::Floor => "Floor",
-            Self::Ln => "Ln",
             Self::Log => "Log",
-            Self::Log10 => "Log10",
-            Self::Log2 => "Log2",
             Self::Round => "Round",
             Self::Signum => "Signum",
             Self::Sin => "Sin",
@@ -22971,10 +22968,7 @@ impl<'de> serde::Deserialize<'de> for ScalarFunction {
             "Cos",
             "Exp",
             "Floor",
-            "Ln",
             "Log",
-            "Log10",
-            "Log2",
             "Round",
             "Signum",
             "Sin",
@@ -23052,10 +23046,7 @@ impl<'de> serde::Deserialize<'de> for ScalarFunction {
                     "Cos" => Ok(ScalarFunction::Cos),
                     "Exp" => Ok(ScalarFunction::Exp),
                     "Floor" => Ok(ScalarFunction::Floor),
-                    "Ln" => Ok(ScalarFunction::Ln),
                     "Log" => Ok(ScalarFunction::Log),
-                    "Log10" => Ok(ScalarFunction::Log10),
-                    "Log2" => Ok(ScalarFunction::Log2),
                     "Round" => Ok(ScalarFunction::Round),
                     "Signum" => Ok(ScalarFunction::Signum),
                     "Sin" => Ok(ScalarFunction::Sin),
diff --git a/datafusion/proto/src/generated/prost.rs 
b/datafusion/proto/src/generated/prost.rs
index babeccec59..6f7e8a9789 100644
--- a/datafusion/proto/src/generated/prost.rs
+++ b/datafusion/proto/src/generated/prost.rs
@@ -2850,10 +2850,10 @@ pub enum ScalarFunction {
     /// 7 was Digest
     Exp = 8,
     Floor = 9,
-    Ln = 10,
+    /// 10 was Ln
     Log = 11,
-    Log10 = 12,
-    Log2 = 13,
+    /// 12 was Log10
+    /// 13 was Log2
     Round = 14,
     Signum = 15,
     Sin = 16,
@@ -2992,10 +2992,7 @@ impl ScalarFunction {
             ScalarFunction::Cos => "Cos",
             ScalarFunction::Exp => "Exp",
             ScalarFunction::Floor => "Floor",
-            ScalarFunction::Ln => "Ln",
             ScalarFunction::Log => "Log",
-            ScalarFunction::Log10 => "Log10",
-            ScalarFunction::Log2 => "Log2",
             ScalarFunction::Round => "Round",
             ScalarFunction::Signum => "Signum",
             ScalarFunction::Sin => "Sin",
@@ -3038,10 +3035,7 @@ impl ScalarFunction {
             "Cos" => Some(Self::Cos),
             "Exp" => Some(Self::Exp),
             "Floor" => Some(Self::Floor),
-            "Ln" => Some(Self::Ln),
             "Log" => Some(Self::Log),
-            "Log10" => Some(Self::Log10),
-            "Log2" => Some(Self::Log2),
             "Round" => Some(Self::Round),
             "Signum" => Some(Self::Signum),
             "Sin" => Some(Self::Sin),
diff --git a/datafusion/proto/src/logical_plan/from_proto.rs 
b/datafusion/proto/src/logical_plan/from_proto.rs
index ff3d6773d5..d372cb428c 100644
--- a/datafusion/proto/src/logical_plan/from_proto.rs
+++ b/datafusion/proto/src/logical_plan/from_proto.rs
@@ -40,7 +40,7 @@ use datafusion_expr::{
     acosh, asinh, atan, atan2, atanh, cbrt, ceil, coalesce, concat_expr, 
concat_ws_expr,
     cos, cosh, cot, degrees, ends_with, exp,
     expr::{self, InList, Sort, WindowFunction},
-    factorial, find_in_set, floor, gcd, initcap, iszero, lcm, ln, log, log10, 
log2,
+    factorial, find_in_set, floor, gcd, initcap, iszero, lcm, log,
     logical_plan::{PlanType, StringifiedPlan},
     nanvl, pi, power, radians, random, round, signum, sin, sinh, sqrt, 
substr_index,
     translate, trunc, AggregateFunction, Between, BinaryExpr, 
BuiltInWindowFunction,
@@ -437,8 +437,6 @@ impl From<&protobuf::ScalarFunction> for 
BuiltinScalarFunction {
             ScalarFunction::Atanh => Self::Atanh,
             ScalarFunction::Exp => Self::Exp,
             ScalarFunction::Log => Self::Log,
-            ScalarFunction::Ln => Self::Ln,
-            ScalarFunction::Log10 => Self::Log10,
             ScalarFunction::Degrees => Self::Degrees,
             ScalarFunction::Radians => Self::Radians,
             ScalarFunction::Factorial => Self::Factorial,
@@ -449,7 +447,6 @@ impl From<&protobuf::ScalarFunction> for 
BuiltinScalarFunction {
             ScalarFunction::Round => Self::Round,
             ScalarFunction::Trunc => Self::Trunc,
             ScalarFunction::Concat => Self::Concat,
-            ScalarFunction::Log2 => Self::Log2,
             ScalarFunction::Signum => Self::Signum,
             ScalarFunction::ConcatWithSeparator => Self::ConcatWithSeparator,
             ScalarFunction::EndsWith => Self::EndsWith,
@@ -1348,11 +1345,6 @@ pub fn parse_expr(
                 ScalarFunction::Radians => {
                     Ok(radians(parse_expr(&args[0], registry, codec)?))
                 }
-                ScalarFunction::Log2 => Ok(log2(parse_expr(&args[0], registry, 
codec)?)),
-                ScalarFunction::Ln => Ok(ln(parse_expr(&args[0], registry, 
codec)?)),
-                ScalarFunction::Log10 => {
-                    Ok(log10(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 89d49c5658..1e4e85c51f 100644
--- a/datafusion/proto/src/logical_plan/to_proto.rs
+++ b/datafusion/proto/src/logical_plan/to_proto.rs
@@ -1431,8 +1431,6 @@ impl TryFrom<&BuiltinScalarFunction> for 
protobuf::ScalarFunction {
             BuiltinScalarFunction::Gcd => Self::Gcd,
             BuiltinScalarFunction::Lcm => Self::Lcm,
             BuiltinScalarFunction::Log => Self::Log,
-            BuiltinScalarFunction::Ln => Self::Ln,
-            BuiltinScalarFunction::Log10 => Self::Log10,
             BuiltinScalarFunction::Degrees => Self::Degrees,
             BuiltinScalarFunction::Radians => Self::Radians,
             BuiltinScalarFunction::Floor => Self::Floor,
@@ -1440,7 +1438,6 @@ impl TryFrom<&BuiltinScalarFunction> for 
protobuf::ScalarFunction {
             BuiltinScalarFunction::Round => Self::Round,
             BuiltinScalarFunction::Trunc => Self::Trunc,
             BuiltinScalarFunction::Concat => Self::Concat,
-            BuiltinScalarFunction::Log2 => Self::Log2,
             BuiltinScalarFunction::Signum => Self::Signum,
             BuiltinScalarFunction::ConcatWithSeparator => 
Self::ConcatWithSeparator,
             BuiltinScalarFunction::EndsWith => Self::EndsWith,

Reply via email to