You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by al...@apache.org on 2024/02/28 18:46:09 UTC
(arrow-datafusion) branch main updated: Run cargo-fmt on `datafusion-functions/core` (#9367)
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 e4182d46ce Run cargo-fmt on `datafusion-functions/core` (#9367)
e4182d46ce is described below
commit e4182d46ce612b8461e6c1c2acfd5db8294c36ac
Author: Andrew Lamb <an...@nerdnetworks.org>
AuthorDate: Wed Feb 28 13:46:03 2024 -0500
Run cargo-fmt on `datafusion-functions/core` (#9367)
* Run cargo-fmt on datafusion-functions/core
* fmt nvl2
---
datafusion/functions/src/core/mod.rs | 1 -
datafusion/functions/src/core/nullif.rs | 22 ++++++++++++----------
datafusion/functions/src/core/nvl.rs | 22 ++++++++++++++--------
datafusion/functions/src/core/nvl2.rs | 26 +++++++++++---------------
datafusion/functions/src/lib.rs | 6 +++++-
datafusion/functions/src/macros.rs | 24 ++++++++++++++++++++++++
6 files changed, 66 insertions(+), 35 deletions(-)
diff --git a/datafusion/functions/src/core/mod.rs b/datafusion/functions/src/core/mod.rs
index 731a45c053..842a1db3e0 100644
--- a/datafusion/functions/src/core/mod.rs
+++ b/datafusion/functions/src/core/mod.rs
@@ -32,4 +32,3 @@ export_functions!(
(nvl, arg_1 arg_2, "returns value2 if value1 is NULL; otherwise it returns value1"),
(nvl2, arg_1 arg_2 arg_3, "Returns value2 if value1 is not NULL; otherwise, it returns value3.")
);
-
diff --git a/datafusion/functions/src/core/nullif.rs b/datafusion/functions/src/core/nullif.rs
index afb308e441..3ff8dbd942 100644
--- a/datafusion/functions/src/core/nullif.rs
+++ b/datafusion/functions/src/core/nullif.rs
@@ -52,14 +52,14 @@ static SUPPORTED_NULLIF_TYPES: &[DataType] = &[
DataType::LargeUtf8,
];
-
impl NullIfFunc {
pub fn new() -> Self {
Self {
- signature:
- Signature::uniform(2, SUPPORTED_NULLIF_TYPES.to_vec(),
- Volatility::Immutable,
- )
+ signature: Signature::uniform(
+ 2,
+ SUPPORTED_NULLIF_TYPES.to_vec(),
+ Volatility::Immutable,
+ ),
}
}
}
@@ -78,10 +78,13 @@ impl ScalarUDFImpl for NullIfFunc {
fn return_type(&self, arg_types: &[DataType]) -> Result<DataType> {
// NULLIF has two args and they might get coerced, get a preview of this
- let coerced_types = datafusion_expr::type_coercion::functions::data_types(arg_types, &self.signature);
- coerced_types.map(|typs| typs[0].clone())
- .map_err(|e| e.context("Failed to coerce arguments for NULLIF")
- )
+ let coerced_types = datafusion_expr::type_coercion::functions::data_types(
+ arg_types,
+ &self.signature,
+ );
+ coerced_types
+ .map(|typs| typs[0].clone())
+ .map_err(|e| e.context("Failed to coerce arguments for NULLIF"))
}
fn invoke(&self, args: &[ColumnarValue]) -> Result<ColumnarValue> {
@@ -89,7 +92,6 @@ impl ScalarUDFImpl for NullIfFunc {
}
}
-
/// Implements NULLIF(expr1, expr2)
/// Args: 0 - left expr is any array
/// 1 - if the left is equal to this expr2, then the result is NULL, otherwise left value is passed.
diff --git a/datafusion/functions/src/core/nvl.rs b/datafusion/functions/src/core/nvl.rs
index 578aaeda2e..76b037eb81 100644
--- a/datafusion/functions/src/core/nvl.rs
+++ b/datafusion/functions/src/core/nvl.rs
@@ -15,12 +15,12 @@
// specific language governing permissions and limitations
// under the License.
+use arrow::array::Array;
+use arrow::compute::is_not_null;
+use arrow::compute::kernels::zip::zip;
use arrow::datatypes::DataType;
use datafusion_common::{internal_err, Result};
use datafusion_expr::{ColumnarValue, ScalarUDFImpl, Signature, Volatility};
-use arrow::compute::kernels::zip::zip;
-use arrow::compute::is_not_null;
-use arrow::array::Array;
#[derive(Debug)]
pub(super) struct NVLFunc {
@@ -50,8 +50,9 @@ static SUPPORTED_NVL_TYPES: &[DataType] = &[
impl NVLFunc {
pub fn new() -> Self {
Self {
- signature:
- Signature::uniform(2, SUPPORTED_NVL_TYPES.to_vec(),
+ signature: Signature::uniform(
+ 2,
+ SUPPORTED_NVL_TYPES.to_vec(),
Volatility::Immutable,
),
aliases: vec![String::from("ifnull")],
@@ -195,8 +196,11 @@ mod tests {
let result = nvl_func(&[a, lit_array])?;
let result = result.into_array(0).expect("Failed to convert to array");
- let expected =
- Arc::new(BooleanArray::from(vec![Some(true), Some(false), Some(false)])) as ArrayRef;
+ let expected = Arc::new(BooleanArray::from(vec![
+ Some(true),
+ Some(false),
+ Some(false),
+ ])) as ArrayRef;
assert_eq!(expected.as_ref(), result.as_ref());
Ok(())
@@ -251,7 +255,9 @@ mod tests {
let b_null = ColumnarValue::Scalar(ScalarValue::Int32(Some(2i32)));
let result_null = nvl_func(&[a_null, b_null])?;
- let result_null = result_null.into_array(1).expect("Failed to convert to array");
+ let result_null = result_null
+ .into_array(1)
+ .expect("Failed to convert to array");
let expected_null = Arc::new(Int32Array::from(vec![Some(2i32)])) as ArrayRef;
diff --git a/datafusion/functions/src/core/nvl2.rs b/datafusion/functions/src/core/nvl2.rs
index 6e2fcd061a..a65657eaea 100644
--- a/datafusion/functions/src/core/nvl2.rs
+++ b/datafusion/functions/src/core/nvl2.rs
@@ -15,12 +15,12 @@
// specific language governing permissions and limitations
// under the License.
+use arrow::array::Array;
+use arrow::compute::is_not_null;
+use arrow::compute::kernels::zip::zip;
use arrow::datatypes::DataType;
use datafusion_common::{internal_err, plan_datafusion_err, Result};
use datafusion_expr::{utils, ColumnarValue, ScalarUDFImpl, Signature, Volatility};
-use arrow::compute::kernels::zip::zip;
-use arrow::compute::is_not_null;
-use arrow::array::Array;
#[derive(Debug)]
pub(super) struct NVL2Func {
@@ -30,10 +30,7 @@ pub(super) struct NVL2Func {
impl NVL2Func {
pub fn new() -> Self {
Self {
- signature:
- Signature::variadic_equal(
- Volatility::Immutable,
- ),
+ signature: Signature::variadic_equal(Volatility::Immutable),
}
}
}
@@ -87,14 +84,13 @@ fn nvl2_func(args: &[ColumnarValue]) -> Result<ColumnarValue> {
}
}
if is_array {
- let args = args.iter().map(|arg| match arg {
- ColumnarValue::Scalar(scalar) => {
- scalar.to_array_of_size(len)
- }
- ColumnarValue::Array(array) => {
- Ok(array.clone())
- }
- }).collect::<Result<Vec<_>>>()?;
+ let args = args
+ .iter()
+ .map(|arg| match arg {
+ ColumnarValue::Scalar(scalar) => scalar.to_array_of_size(len),
+ ColumnarValue::Array(array) => Ok(array.clone()),
+ })
+ .collect::<Result<Vec<_>>>()?;
let to_apply = is_not_null(&args[0])?;
let value = zip(&to_apply, &args[1], &args[2])?;
Ok(ColumnarValue::Array(value))
diff --git a/datafusion/functions/src/lib.rs b/datafusion/functions/src/lib.rs
index d2f0270959..746b1d93d6 100644
--- a/datafusion/functions/src/lib.rs
+++ b/datafusion/functions/src/lib.rs
@@ -84,7 +84,11 @@ use log::debug;
#[macro_use]
pub mod macros;
-make_package!(core, "core_expressions", "Core datafusion expressions");
+/// Core datafusion expressions
+/// Enabled via feature flag `core_expressions`
+#[cfg(feature = "core_expressions")]
+pub mod core;
+make_stub_package!(core, "core_expressions");
make_package!(
encoding,
diff --git a/datafusion/functions/src/macros.rs b/datafusion/functions/src/macros.rs
index 5debcbda30..fd32e1ed6f 100644
--- a/datafusion/functions/src/macros.rs
+++ b/datafusion/functions/src/macros.rs
@@ -122,6 +122,30 @@ macro_rules! make_package {
};
}
+/// Macro creates a sub module if the feature is not enabled
+///
+/// The rationale for providing stub functions is to help users to configure datafusion
+/// properly (so they get an error telling them why a function is not available)
+/// instead of getting a cryptic "no function found" message at runtime.
+
+macro_rules! make_stub_package {
+ ($name:ident, $feature:literal) => {
+ #[cfg(not(feature = $feature))]
+ #[doc = concat!("Disabled. Enable via feature flag `", $feature, "`")]
+ pub mod $name {
+ use datafusion_expr::ScalarUDF;
+ use log::debug;
+ use std::sync::Arc;
+
+ /// Returns an empty list of functions when the feature is not enabled
+ pub fn functions() -> Vec<Arc<ScalarUDF>> {
+ debug!("{} functions disabled", stringify!($name));
+ vec![]
+ }
+ }
+ };
+}
+
/// Invokes a function on each element of an array and returns the result as a new array
///
/// $ARG: ArrayRef