Skip to content

Commit 078aeb6

Browse files
move Log2, Log10, Ln to datafusion-functions (#9869)
* move log2 * move log10, ln * refactor log_b functions to use macro * update proto
1 parent 21fe0b7 commit 078aeb6

File tree

10 files changed

+26
-69
lines changed

10 files changed

+26
-69
lines changed

datafusion/expr/src/built_in_function.rs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,8 @@ pub enum BuiltinScalarFunction {
7171
Lcm,
7272
/// iszero
7373
Iszero,
74-
/// ln, Natural logarithm
75-
Ln,
7674
/// log, same as log10
7775
Log,
78-
/// log10
79-
Log10,
80-
/// log2
81-
Log2,
8276
/// nanvl
8377
Nanvl,
8478
/// pi
@@ -187,10 +181,7 @@ impl BuiltinScalarFunction {
187181
BuiltinScalarFunction::Gcd => Volatility::Immutable,
188182
BuiltinScalarFunction::Iszero => Volatility::Immutable,
189183
BuiltinScalarFunction::Lcm => Volatility::Immutable,
190-
BuiltinScalarFunction::Ln => Volatility::Immutable,
191184
BuiltinScalarFunction::Log => Volatility::Immutable,
192-
BuiltinScalarFunction::Log10 => Volatility::Immutable,
193-
BuiltinScalarFunction::Log2 => Volatility::Immutable,
194185
BuiltinScalarFunction::Nanvl => Volatility::Immutable,
195186
BuiltinScalarFunction::Pi => Volatility::Immutable,
196187
BuiltinScalarFunction::Power => Volatility::Immutable,
@@ -292,9 +283,6 @@ impl BuiltinScalarFunction {
292283
| BuiltinScalarFunction::Degrees
293284
| BuiltinScalarFunction::Exp
294285
| BuiltinScalarFunction::Floor
295-
| BuiltinScalarFunction::Ln
296-
| BuiltinScalarFunction::Log10
297-
| BuiltinScalarFunction::Log2
298286
| BuiltinScalarFunction::Radians
299287
| BuiltinScalarFunction::Round
300288
| BuiltinScalarFunction::Signum
@@ -412,9 +400,6 @@ impl BuiltinScalarFunction {
412400
| BuiltinScalarFunction::Degrees
413401
| BuiltinScalarFunction::Exp
414402
| BuiltinScalarFunction::Floor
415-
| BuiltinScalarFunction::Ln
416-
| BuiltinScalarFunction::Log10
417-
| BuiltinScalarFunction::Log2
418403
| BuiltinScalarFunction::Radians
419404
| BuiltinScalarFunction::Signum
420405
| BuiltinScalarFunction::Sin
@@ -450,9 +435,6 @@ impl BuiltinScalarFunction {
450435
| BuiltinScalarFunction::Exp
451436
| BuiltinScalarFunction::Factorial
452437
| BuiltinScalarFunction::Floor
453-
| BuiltinScalarFunction::Ln
454-
| BuiltinScalarFunction::Log10
455-
| BuiltinScalarFunction::Log2
456438
| BuiltinScalarFunction::Radians
457439
| BuiltinScalarFunction::Round
458440
| BuiltinScalarFunction::Signum
@@ -490,10 +472,7 @@ impl BuiltinScalarFunction {
490472
BuiltinScalarFunction::Gcd => &["gcd"],
491473
BuiltinScalarFunction::Iszero => &["iszero"],
492474
BuiltinScalarFunction::Lcm => &["lcm"],
493-
BuiltinScalarFunction::Ln => &["ln"],
494475
BuiltinScalarFunction::Log => &["log"],
495-
BuiltinScalarFunction::Log10 => &["log10"],
496-
BuiltinScalarFunction::Log2 => &["log2"],
497476
BuiltinScalarFunction::Nanvl => &["nanvl"],
498477
BuiltinScalarFunction::Pi => &["pi"],
499478
BuiltinScalarFunction::Power => &["power", "pow"],

datafusion/expr/src/expr_fn.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -570,9 +570,6 @@ scalar_expr!(Signum, signum, num, "sign of the argument (-1, 0, +1) ");
570570
scalar_expr!(Exp, exp, num, "exponential");
571571
scalar_expr!(Gcd, gcd, arg_1 arg_2, "greatest common divisor");
572572
scalar_expr!(Lcm, lcm, arg_1 arg_2, "least common multiple");
573-
scalar_expr!(Log2, log2, num, "base 2 logarithm of number");
574-
scalar_expr!(Log10, log10, num, "base 10 logarithm of number");
575-
scalar_expr!(Ln, ln, num, "natural logarithm (base e) of number");
576573
scalar_expr!(Power, power, base exponent, "`base` raised to the power of `exponent`");
577574
scalar_expr!(Atan2, atan2, y x, "inverse tangent of a division given in the argument");
578575
scalar_expr!(Log, log, base x, "logarithm of a `x` for a particular `base`");
@@ -1001,9 +998,6 @@ mod test {
1001998
test_nary_scalar_expr!(Trunc, trunc, num, precision);
1002999
test_unary_scalar_expr!(Signum, signum);
10031000
test_unary_scalar_expr!(Exp, exp);
1004-
test_unary_scalar_expr!(Log2, log2);
1005-
test_unary_scalar_expr!(Log10, log10);
1006-
test_unary_scalar_expr!(Ln, ln);
10071001
test_scalar_expr!(Atan2, atan2, y, x);
10081002
test_scalar_expr!(Nanvl, nanvl, x, y);
10091003
test_scalar_expr!(Iszero, iszero, input);

datafusion/functions/src/macros.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,16 @@ macro_rules! downcast_arg {
157157
/// $NAME: the name of the function
158158
/// $UNARY_FUNC: the unary function to apply to the argument
159159
macro_rules! make_math_unary_udf {
160-
($UDF:ident, $GNAME:ident, $NAME:ident, $UNARY_FUNC:ident) => {
160+
($UDF:ident, $GNAME:ident, $NAME:ident, $UNARY_FUNC:ident, $MONOTONICITY:expr) => {
161161
make_udf_function!($NAME::$UDF, $GNAME, $NAME);
162162

163163
mod $NAME {
164164
use arrow::array::{ArrayRef, Float32Array, Float64Array};
165165
use arrow::datatypes::DataType;
166166
use datafusion_common::{exec_err, DataFusionError, Result};
167-
use datafusion_expr::{ColumnarValue, ScalarUDFImpl, Signature, Volatility};
167+
use datafusion_expr::{
168+
ColumnarValue, FuncMonotonicity, ScalarUDFImpl, Signature, Volatility,
169+
};
168170
use std::any::Any;
169171
use std::sync::Arc;
170172

@@ -208,6 +210,10 @@ macro_rules! make_math_unary_udf {
208210
}
209211
}
210212

213+
fn monotonicity(&self) -> Result<Option<FuncMonotonicity>> {
214+
Ok($MONOTONICITY)
215+
}
216+
211217
fn invoke(&self, args: &[ColumnarValue]) -> Result<ColumnarValue> {
212218
let args = ColumnarValue::values_to_arrays(args)?;
213219

datafusion/functions/src/math/mod.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,14 @@ mod nans;
2424
make_udf_function!(nans::IsNanFunc, ISNAN, isnan);
2525
make_udf_function!(abs::AbsFunc, ABS, abs);
2626

27-
make_math_unary_udf!(TanhFunc, TANH, tanh, tanh);
28-
make_math_unary_udf!(AcosFunc, ACOS, acos, acos);
29-
make_math_unary_udf!(AsinFunc, ASIN, asin, asin);
30-
make_math_unary_udf!(TanFunc, TAN, tan, tan);
27+
make_math_unary_udf!(Log2Func, LOG2, log2, log2, Some(vec![Some(true)]));
28+
make_math_unary_udf!(Log10Func, LOG10, log10, log10, Some(vec![Some(true)]));
29+
make_math_unary_udf!(LnFunc, LN, ln, ln, Some(vec![Some(true)]));
30+
31+
make_math_unary_udf!(TanhFunc, TANH, tanh, tanh, None);
32+
make_math_unary_udf!(AcosFunc, ACOS, acos, acos, None);
33+
make_math_unary_udf!(AsinFunc, ASIN, asin, asin, None);
34+
make_math_unary_udf!(TanFunc, TAN, tan, tan, None);
3135

3236
// Export the functions out of this package, both as expr_fn as well as a list of functions
3337
export_functions!(
@@ -37,6 +41,9 @@ export_functions!(
3741
"returns true if a given number is +NaN or -NaN otherwise returns false"
3842
),
3943
(abs, num, "returns the absolute value of a given number"),
44+
(log2, num, "base 2 logarithm of a number"),
45+
(log10, num, "base 10 logarithm of a number"),
46+
(ln, num, "natural logarithm (base e) of a number"),
4047
(
4148
acos,
4249
num,

datafusion/physical-expr/src/functions.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,6 @@ pub fn create_physical_fun(
221221
BuiltinScalarFunction::Lcm => {
222222
Arc::new(|args| make_scalar_function_inner(math_expressions::lcm)(args))
223223
}
224-
BuiltinScalarFunction::Ln => Arc::new(math_expressions::ln),
225-
BuiltinScalarFunction::Log10 => Arc::new(math_expressions::log10),
226-
BuiltinScalarFunction::Log2 => Arc::new(math_expressions::log2),
227224
BuiltinScalarFunction::Nanvl => {
228225
Arc::new(|args| make_scalar_function_inner(math_expressions::nanvl)(args))
229226
}

datafusion/proto/proto/datafusion.proto

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -551,10 +551,10 @@ enum ScalarFunction {
551551
// 7 was Digest
552552
Exp = 8;
553553
Floor = 9;
554-
Ln = 10;
554+
// 10 was Ln
555555
Log = 11;
556-
Log10 = 12;
557-
Log2 = 13;
556+
// 12 was Log10
557+
// 13 was Log2
558558
Round = 14;
559559
Signum = 15;
560560
Sin = 16;

datafusion/proto/src/generated/pbjson.rs

Lines changed: 0 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

datafusion/proto/src/generated/prost.rs

Lines changed: 3 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

datafusion/proto/src/logical_plan/from_proto.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ use datafusion_expr::{
4040
acosh, asinh, atan, atan2, atanh, cbrt, ceil, coalesce, concat_expr, concat_ws_expr,
4141
cos, cosh, cot, degrees, ends_with, exp,
4242
expr::{self, InList, Sort, WindowFunction},
43-
factorial, find_in_set, floor, gcd, initcap, iszero, lcm, ln, log, log10, log2,
43+
factorial, find_in_set, floor, gcd, initcap, iszero, lcm, log,
4444
logical_plan::{PlanType, StringifiedPlan},
4545
nanvl, pi, power, radians, random, round, signum, sin, sinh, sqrt, substr_index,
4646
translate, trunc, AggregateFunction, Between, BinaryExpr, BuiltInWindowFunction,
@@ -437,8 +437,6 @@ impl From<&protobuf::ScalarFunction> for BuiltinScalarFunction {
437437
ScalarFunction::Atanh => Self::Atanh,
438438
ScalarFunction::Exp => Self::Exp,
439439
ScalarFunction::Log => Self::Log,
440-
ScalarFunction::Ln => Self::Ln,
441-
ScalarFunction::Log10 => Self::Log10,
442440
ScalarFunction::Degrees => Self::Degrees,
443441
ScalarFunction::Radians => Self::Radians,
444442
ScalarFunction::Factorial => Self::Factorial,
@@ -449,7 +447,6 @@ impl From<&protobuf::ScalarFunction> for BuiltinScalarFunction {
449447
ScalarFunction::Round => Self::Round,
450448
ScalarFunction::Trunc => Self::Trunc,
451449
ScalarFunction::Concat => Self::Concat,
452-
ScalarFunction::Log2 => Self::Log2,
453450
ScalarFunction::Signum => Self::Signum,
454451
ScalarFunction::ConcatWithSeparator => Self::ConcatWithSeparator,
455452
ScalarFunction::EndsWith => Self::EndsWith,
@@ -1348,11 +1345,6 @@ pub fn parse_expr(
13481345
ScalarFunction::Radians => {
13491346
Ok(radians(parse_expr(&args[0], registry, codec)?))
13501347
}
1351-
ScalarFunction::Log2 => Ok(log2(parse_expr(&args[0], registry, codec)?)),
1352-
ScalarFunction::Ln => Ok(ln(parse_expr(&args[0], registry, codec)?)),
1353-
ScalarFunction::Log10 => {
1354-
Ok(log10(parse_expr(&args[0], registry, codec)?))
1355-
}
13561348
ScalarFunction::Floor => {
13571349
Ok(floor(parse_expr(&args[0], registry, codec)?))
13581350
}

datafusion/proto/src/logical_plan/to_proto.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,16 +1431,13 @@ impl TryFrom<&BuiltinScalarFunction> for protobuf::ScalarFunction {
14311431
BuiltinScalarFunction::Gcd => Self::Gcd,
14321432
BuiltinScalarFunction::Lcm => Self::Lcm,
14331433
BuiltinScalarFunction::Log => Self::Log,
1434-
BuiltinScalarFunction::Ln => Self::Ln,
1435-
BuiltinScalarFunction::Log10 => Self::Log10,
14361434
BuiltinScalarFunction::Degrees => Self::Degrees,
14371435
BuiltinScalarFunction::Radians => Self::Radians,
14381436
BuiltinScalarFunction::Floor => Self::Floor,
14391437
BuiltinScalarFunction::Ceil => Self::Ceil,
14401438
BuiltinScalarFunction::Round => Self::Round,
14411439
BuiltinScalarFunction::Trunc => Self::Trunc,
14421440
BuiltinScalarFunction::Concat => Self::Concat,
1443-
BuiltinScalarFunction::Log2 => Self::Log2,
14441441
BuiltinScalarFunction::Signum => Self::Signum,
14451442
BuiltinScalarFunction::ConcatWithSeparator => Self::ConcatWithSeparator,
14461443
BuiltinScalarFunction::EndsWith => Self::EndsWith,

0 commit comments

Comments
 (0)