Skip to content

Commit f5805b7

Browse files
Move radians, signum, sin, sinh and sqrt functions to datafusion-functions crate (#9882)
* Issue-9860 - Move Radians, Signum, Sin, Sinh, Sqrt functions to datafusion-functions * Issue-9860 - Fix UT failure --------- Co-authored-by: Andrew Lamb <[email protected]>
1 parent e9c5dc9 commit f5805b7

File tree

13 files changed

+36
-130
lines changed

13 files changed

+36
-130
lines changed

datafusion/expr/src/built_in_function.rs

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,8 @@ pub enum BuiltinScalarFunction {
6969
Pi,
7070
/// power
7171
Power,
72-
/// radians
73-
Radians,
7472
/// round
7573
Round,
76-
/// signum
77-
Signum,
78-
/// sin
79-
Sin,
80-
/// sinh
81-
Sinh,
82-
/// sqrt
83-
Sqrt,
8474
/// trunc
8575
Trunc,
8676
/// cot
@@ -165,18 +155,13 @@ impl BuiltinScalarFunction {
165155
BuiltinScalarFunction::Pi => Volatility::Immutable,
166156
BuiltinScalarFunction::Power => Volatility::Immutable,
167157
BuiltinScalarFunction::Round => Volatility::Immutable,
168-
BuiltinScalarFunction::Signum => Volatility::Immutable,
169-
BuiltinScalarFunction::Sin => Volatility::Immutable,
170-
BuiltinScalarFunction::Sinh => Volatility::Immutable,
171-
BuiltinScalarFunction::Sqrt => Volatility::Immutable,
172158
BuiltinScalarFunction::Cbrt => Volatility::Immutable,
173159
BuiltinScalarFunction::Cot => Volatility::Immutable,
174160
BuiltinScalarFunction::Trunc => Volatility::Immutable,
175161
BuiltinScalarFunction::Concat => Volatility::Immutable,
176162
BuiltinScalarFunction::ConcatWithSeparator => Volatility::Immutable,
177163
BuiltinScalarFunction::EndsWith => Volatility::Immutable,
178164
BuiltinScalarFunction::InitCap => Volatility::Immutable,
179-
BuiltinScalarFunction::Radians => Volatility::Immutable,
180165

181166
// Volatile builtin functions
182167
BuiltinScalarFunction::Random => Volatility::Volatile,
@@ -241,12 +226,7 @@ impl BuiltinScalarFunction {
241226
| BuiltinScalarFunction::Degrees
242227
| BuiltinScalarFunction::Exp
243228
| BuiltinScalarFunction::Floor
244-
| BuiltinScalarFunction::Radians
245229
| BuiltinScalarFunction::Round
246-
| BuiltinScalarFunction::Signum
247-
| BuiltinScalarFunction::Sin
248-
| BuiltinScalarFunction::Sinh
249-
| BuiltinScalarFunction::Sqrt
250230
| BuiltinScalarFunction::Cbrt
251231
| BuiltinScalarFunction::Trunc
252232
| BuiltinScalarFunction::Cot => match input_expr_types[0] {
@@ -335,11 +315,6 @@ impl BuiltinScalarFunction {
335315
| BuiltinScalarFunction::Degrees
336316
| BuiltinScalarFunction::Exp
337317
| BuiltinScalarFunction::Floor
338-
| BuiltinScalarFunction::Radians
339-
| BuiltinScalarFunction::Signum
340-
| BuiltinScalarFunction::Sin
341-
| BuiltinScalarFunction::Sinh
342-
| BuiltinScalarFunction::Sqrt
343318
| BuiltinScalarFunction::Cot => {
344319
// math expressions expect 1 argument of type f64 or f32
345320
// priority is given to f64 because e.g. `sqrt(1i32)` is in IR (real numbers) and thus we
@@ -366,11 +341,7 @@ impl BuiltinScalarFunction {
366341
| BuiltinScalarFunction::Exp
367342
| BuiltinScalarFunction::Factorial
368343
| BuiltinScalarFunction::Floor
369-
| BuiltinScalarFunction::Radians
370344
| BuiltinScalarFunction::Round
371-
| BuiltinScalarFunction::Signum
372-
| BuiltinScalarFunction::Sinh
373-
| BuiltinScalarFunction::Sqrt
374345
| BuiltinScalarFunction::Cbrt
375346
| BuiltinScalarFunction::Trunc
376347
| BuiltinScalarFunction::Pi
@@ -402,13 +373,8 @@ impl BuiltinScalarFunction {
402373
BuiltinScalarFunction::Nanvl => &["nanvl"],
403374
BuiltinScalarFunction::Pi => &["pi"],
404375
BuiltinScalarFunction::Power => &["power", "pow"],
405-
BuiltinScalarFunction::Radians => &["radians"],
406376
BuiltinScalarFunction::Random => &["random"],
407377
BuiltinScalarFunction::Round => &["round"],
408-
BuiltinScalarFunction::Signum => &["signum"],
409-
BuiltinScalarFunction::Sin => &["sin"],
410-
BuiltinScalarFunction::Sinh => &["sinh"],
411-
BuiltinScalarFunction::Sqrt => &["sqrt"],
412378
BuiltinScalarFunction::Trunc => &["trunc"],
413379

414380
// conditional functions

datafusion/expr/src/expr_fn.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -534,12 +534,9 @@ macro_rules! nary_scalar_expr {
534534
// generate methods for creating the supported unary/binary expressions
535535

536536
// math functions
537-
scalar_expr!(Sqrt, sqrt, num, "square root of a number");
538537
scalar_expr!(Cbrt, cbrt, num, "cube root of a number");
539-
scalar_expr!(Sin, sin, num, "sine");
540538
scalar_expr!(Cos, cos, num, "cosine");
541539
scalar_expr!(Cot, cot, num, "cotangent");
542-
scalar_expr!(Sinh, sinh, num, "hyperbolic sine");
543540
scalar_expr!(Cosh, cosh, num, "hyperbolic cosine");
544541
scalar_expr!(Factorial, factorial, num, "factorial");
545542
scalar_expr!(
@@ -555,14 +552,12 @@ scalar_expr!(
555552
"nearest integer greater than or equal to argument"
556553
);
557554
scalar_expr!(Degrees, degrees, num, "converts radians to degrees");
558-
scalar_expr!(Radians, radians, num, "converts degrees to radians");
559555
nary_scalar_expr!(Round, round, "round to nearest integer");
560556
nary_scalar_expr!(
561557
Trunc,
562558
trunc,
563559
"truncate toward zero, with optional precision"
564560
);
565-
scalar_expr!(Signum, signum, num, "sign of the argument (-1, 0, +1) ");
566561
scalar_expr!(Exp, exp, num, "exponential");
567562
scalar_expr!(Gcd, gcd, arg_1 arg_2, "greatest common divisor");
568563
scalar_expr!(Lcm, lcm, arg_1 arg_2, "least common multiple");
@@ -885,8 +880,8 @@ impl WindowUDFImpl for SimpleWindowUDF {
885880
/// ```
886881
/// use datafusion_expr::{col, lit, call_fn};
887882
///
888-
/// // create the expression sin(x) < 0.2
889-
/// let expr = call_fn("sin", vec![col("x")]).unwrap().lt(lit(0.2));
883+
/// // create the expression trunc(x) < 0.2
884+
/// let expr = call_fn("trunc", vec![col("x")]).unwrap().lt(lit(0.2));
890885
/// ```
891886
pub fn call_fn(name: impl AsRef<str>, args: Vec<Expr>) -> Result<Expr> {
892887
match name.as_ref().parse::<BuiltinScalarFunction>() {
@@ -967,23 +962,18 @@ mod test {
967962

968963
#[test]
969964
fn scalar_function_definitions() {
970-
test_unary_scalar_expr!(Sqrt, sqrt);
971965
test_unary_scalar_expr!(Cbrt, cbrt);
972-
test_unary_scalar_expr!(Sin, sin);
973966
test_unary_scalar_expr!(Cos, cos);
974967
test_unary_scalar_expr!(Cot, cot);
975-
test_unary_scalar_expr!(Sinh, sinh);
976968
test_unary_scalar_expr!(Cosh, cosh);
977969
test_unary_scalar_expr!(Factorial, factorial);
978970
test_unary_scalar_expr!(Floor, floor);
979971
test_unary_scalar_expr!(Ceil, ceil);
980972
test_unary_scalar_expr!(Degrees, degrees);
981-
test_unary_scalar_expr!(Radians, radians);
982973
test_nary_scalar_expr!(Round, round, input);
983974
test_nary_scalar_expr!(Round, round, input, decimal_places);
984975
test_nary_scalar_expr!(Trunc, trunc, num);
985976
test_nary_scalar_expr!(Trunc, trunc, num, precision);
986-
test_unary_scalar_expr!(Signum, signum);
987977
test_unary_scalar_expr!(Exp, exp);
988978
test_scalar_expr!(Nanvl, nanvl, x, y);
989979
test_scalar_expr!(Iszero, iszero, input);

datafusion/functions/src/math/mod.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ make_math_unary_udf!(AcoshFunc, ACOSH, acosh, acosh, Some(vec![Some(true)]));
3939
make_math_unary_udf!(AtanFunc, ATAN, atan, atan, Some(vec![Some(true)]));
4040
make_math_binary_udf!(Atan2, ATAN2, atan2, atan2, Some(vec![Some(true)]));
4141

42+
make_math_unary_udf!(RadiansFunc, RADIANS, radians, to_radians, None);
43+
make_math_unary_udf!(SignumFunc, SIGNUM, signum, signum, None);
44+
make_math_unary_udf!(SinFunc, SIN, sin, sin, None);
45+
make_math_unary_udf!(SinhFunc, SINH, sinh, sinh, None);
46+
make_math_unary_udf!(SqrtFunc, SQRT, sqrt, sqrt, None);
47+
4248
// Export the functions out of this package, both as expr_fn as well as a list of functions
4349
export_functions!(
4450
(
@@ -66,5 +72,10 @@ export_functions!(
6672
(asinh, num, "returns inverse hyperbolic sine"),
6773
(acosh, num, "returns inverse hyperbolic cosine"),
6874
(atan, num, "returns inverse tangent"),
69-
(atan2, y x, "returns inverse tangent of a division given in the argument")
75+
(atan2, y x, "returns inverse tangent of a division given in the argument"),
76+
(radians, num, "converts degrees to radians"),
77+
(signum, num, "sign of the argument (-1, 0, +1)"),
78+
(sin, num, "sine"),
79+
(sinh, num, "hyperbolic sine"),
80+
(sqrt, num, "square root of a number")
7081
);

datafusion/physical-expr/src/functions.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -200,15 +200,10 @@ pub fn create_physical_fun(
200200
BuiltinScalarFunction::Nanvl => {
201201
Arc::new(|args| make_scalar_function_inner(math_expressions::nanvl)(args))
202202
}
203-
BuiltinScalarFunction::Radians => Arc::new(math_expressions::to_radians),
204203
BuiltinScalarFunction::Random => Arc::new(math_expressions::random),
205204
BuiltinScalarFunction::Round => {
206205
Arc::new(|args| make_scalar_function_inner(math_expressions::round)(args))
207206
}
208-
BuiltinScalarFunction::Signum => Arc::new(math_expressions::signum),
209-
BuiltinScalarFunction::Sin => Arc::new(math_expressions::sin),
210-
BuiltinScalarFunction::Sinh => Arc::new(math_expressions::sinh),
211-
BuiltinScalarFunction::Sqrt => Arc::new(math_expressions::sqrt),
212207
BuiltinScalarFunction::Cbrt => Arc::new(math_expressions::cbrt),
213208
BuiltinScalarFunction::Trunc => {
214209
Arc::new(|args| make_scalar_function_inner(math_expressions::trunc)(args))

datafusion/physical-expr/src/math_expressions.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,8 @@ macro_rules! make_function_scalar_inputs_return_type {
155155
}};
156156
}
157157

158-
math_unary_function!("sqrt", sqrt);
159158
math_unary_function!("cbrt", cbrt);
160-
math_unary_function!("sin", sin);
161159
math_unary_function!("cos", cos);
162-
math_unary_function!("sinh", sinh);
163160
math_unary_function!("cosh", cosh);
164161
math_unary_function!("asin", asin);
165162
math_unary_function!("acos", acos);
@@ -169,13 +166,11 @@ math_unary_function!("acosh", acosh);
169166
math_unary_function!("atanh", atanh);
170167
math_unary_function!("floor", floor);
171168
math_unary_function!("ceil", ceil);
172-
math_unary_function!("signum", signum);
173169
math_unary_function!("exp", exp);
174170
math_unary_function!("ln", ln);
175171
math_unary_function!("log2", log2);
176172
math_unary_function!("log10", log10);
177173
math_unary_function!("degrees", to_degrees);
178-
math_unary_function!("radians", to_radians);
179174

180175
/// Factorial SQL function
181176
pub fn factorial(args: &[ArrayRef]) -> Result<ArrayRef> {

datafusion/proto/proto/datafusion.proto

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -556,9 +556,9 @@ enum ScalarFunction {
556556
// 12 was Log10
557557
// 13 was Log2
558558
Round = 14;
559-
Signum = 15;
560-
Sin = 16;
561-
Sqrt = 17;
559+
// 15 was Signum
560+
// 16 was Sin
561+
// 17 was Sqrt
562562
// Tan = 18;
563563
Trunc = 19;
564564
// 20 was Array
@@ -618,12 +618,12 @@ enum ScalarFunction {
618618
// 74 Acosh
619619
// 75 was Asinh
620620
// 76 was Atanh
621-
Sinh = 77;
621+
// 77 was Sinh
622622
Cosh = 78;
623623
// Tanh = 79;
624624
Pi = 80;
625625
Degrees = 81;
626-
Radians = 82;
626+
// 82 was Radians
627627
Factorial = 83;
628628
Lcm = 84;
629629
Gcd = 85;

datafusion/proto/src/generated/pbjson.rs

Lines changed: 0 additions & 15 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: 5 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)