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 2023/04/22 11:21:08 UTC
[arrow-datafusion] branch main updated: fix: Use arrow bitwise_op as binary_kernals (#6093)
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 f1bae2c90f fix: Use arrow bitwise_op as binary_kernals (#6093)
f1bae2c90f is described below
commit f1bae2c90f5f1dfa8f9c980493080c95f6d4ff60
Author: RT_Enzyme <58...@users.noreply.github.com>
AuthorDate: Sat Apr 22 19:21:02 2023 +0800
fix: Use arrow bitwise_op as binary_kernals (#6093)
---
.../src/expressions/binary/kernels.rs | 105 +++++++++------------
1 file changed, 44 insertions(+), 61 deletions(-)
diff --git a/datafusion/physical-expr/src/expressions/binary/kernels.rs b/datafusion/physical-expr/src/expressions/binary/kernels.rs
index f38180e924..6284f9bed4 100644
--- a/datafusion/physical-expr/src/expressions/binary/kernels.rs
+++ b/datafusion/physical-expr/src/expressions/binary/kernels.rs
@@ -18,6 +18,7 @@
//! This module contains computation kernels that are specific to
//! datafusion and not (yet) targeted to port upstream to arrow
use arrow::array::*;
+use arrow::compute::binary;
use arrow::datatypes::DataType;
use datafusion_common::{DataFusionError, Result, ScalarValue};
use datafusion_expr::Operator;
@@ -29,19 +30,9 @@ use std::sync::Arc;
/// It is used to do bitwise operation.
macro_rules! binary_bitwise_array_op {
($LEFT:expr, $RIGHT:expr, $METHOD:expr, $ARRAY_TYPE:ident) => {{
- let len = $LEFT.len();
let left = $LEFT.as_any().downcast_ref::<$ARRAY_TYPE>().unwrap();
let right = $RIGHT.as_any().downcast_ref::<$ARRAY_TYPE>().unwrap();
- let result = (0..len)
- .into_iter()
- .map(|i| {
- if left.is_null(i) || right.is_null(i) {
- None
- } else {
- Some($METHOD(left.value(i), right.value(i)))
- }
- })
- .collect::<$ARRAY_TYPE>();
+ let result: $ARRAY_TYPE = binary(left, right, $METHOD)?;
Ok(Arc::new(result))
}};
}
@@ -58,16 +49,8 @@ macro_rules! binary_bitwise_array_scalar {
Ok(new_null_array(array.data_type(), len))
} else {
let right: $TYPE = scalar.try_into().unwrap();
- let result = (0..len)
- .into_iter()
- .map(|i| {
- if array.is_null(i) {
- None
- } else {
- Some($METHOD(array.value(i), right))
- }
- })
- .collect::<$ARRAY_TYPE>();
+ let method = $METHOD(right);
+ let result: $ARRAY_TYPE = array.unary(method);
Ok(Arc::new(result) as ArrayRef)
}
}};
@@ -332,7 +315,7 @@ pub(crate) fn bitwise_and_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i8, b: i8| a & b,
+ |a: i8| move |b: i8| a & b,
Int8Array,
i8
)
@@ -341,7 +324,7 @@ pub(crate) fn bitwise_and_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i16, b: i16| a & b,
+ |a: i16| move |b: i16| a & b,
Int16Array,
i16
)
@@ -350,7 +333,7 @@ pub(crate) fn bitwise_and_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i32, b: i32| a & b,
+ |a: i32| move |b: i32| a & b,
Int32Array,
i32
)
@@ -359,7 +342,7 @@ pub(crate) fn bitwise_and_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i64, b: i64| a & b,
+ |a: i64| move |b: i64| a & b,
Int64Array,
i64
)
@@ -368,7 +351,7 @@ pub(crate) fn bitwise_and_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u8, b: u8| a & b,
+ |a: u8| move |b: u8| a & b,
UInt8Array,
u8
)
@@ -377,7 +360,7 @@ pub(crate) fn bitwise_and_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u16, b: u16| a & b,
+ |a: u16| move |b: u16| a & b,
UInt16Array,
u16
)
@@ -386,7 +369,7 @@ pub(crate) fn bitwise_and_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u32, b: u32| a & b,
+ |a: u32| move |b: u32| a & b,
UInt32Array,
u32
)
@@ -395,7 +378,7 @@ pub(crate) fn bitwise_and_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u64, b: u64| a & b,
+ |a: u64| move |b: u64| a & b,
UInt64Array,
u64
)
@@ -418,7 +401,7 @@ pub(crate) fn bitwise_or_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i8, b: i8| a | b,
+ |a: i8| move |b: i8| a | b,
Int8Array,
i8
)
@@ -427,7 +410,7 @@ pub(crate) fn bitwise_or_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i16, b: i16| a | b,
+ |a: i16| move |b: i16| a | b,
Int16Array,
i16
)
@@ -436,7 +419,7 @@ pub(crate) fn bitwise_or_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i32, b: i32| a | b,
+ |a: i32| move |b: i32| a | b,
Int32Array,
i32
)
@@ -445,7 +428,7 @@ pub(crate) fn bitwise_or_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i64, b: i64| a | b,
+ |a: i64| move |b: i64| a | b,
Int64Array,
i64
)
@@ -454,7 +437,7 @@ pub(crate) fn bitwise_or_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u8, b: u8| a | b,
+ |a: u8| move |b: u8| a | b,
UInt8Array,
u8
)
@@ -463,7 +446,7 @@ pub(crate) fn bitwise_or_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u16, b: u16| a | b,
+ |a: u16| move |b: u16| a | b,
UInt16Array,
u16
)
@@ -472,7 +455,7 @@ pub(crate) fn bitwise_or_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u32, b: u32| a | b,
+ |a: u32| move |b: u32| a | b,
UInt32Array,
u32
)
@@ -481,7 +464,7 @@ pub(crate) fn bitwise_or_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u64, b: u64| a | b,
+ |a: u64| move |b: u64| a | b,
UInt64Array,
u64
)
@@ -504,7 +487,7 @@ pub(crate) fn bitwise_xor_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i8, b: i8| a ^ b,
+ |a: i8| move |b: i8| a ^ b,
Int8Array,
i8
)
@@ -513,7 +496,7 @@ pub(crate) fn bitwise_xor_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i16, b: i16| a ^ b,
+ |a: i16| move |b: i16| a ^ b,
Int16Array,
i16
)
@@ -522,7 +505,7 @@ pub(crate) fn bitwise_xor_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i32, b: i32| a ^ b,
+ |a: i32| move |b: i32| a ^ b,
Int32Array,
i32
)
@@ -531,7 +514,7 @@ pub(crate) fn bitwise_xor_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i64, b: i64| a ^ b,
+ |a: i64| move |b: i64| a ^ b,
Int64Array,
i64
)
@@ -540,7 +523,7 @@ pub(crate) fn bitwise_xor_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u8, b: u8| a ^ b,
+ |a: u8| move |b: u8| a ^ b,
UInt8Array,
u8
)
@@ -549,7 +532,7 @@ pub(crate) fn bitwise_xor_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u16, b: u16| a ^ b,
+ |a: u16| move |b: u16| a ^ b,
UInt16Array,
u16
)
@@ -558,7 +541,7 @@ pub(crate) fn bitwise_xor_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u32, b: u32| a ^ b,
+ |a: u32| move |b: u32| a ^ b,
UInt32Array,
u32
)
@@ -567,7 +550,7 @@ pub(crate) fn bitwise_xor_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u64, b: u64| a ^ b,
+ |a: u64| move |b: u64| a ^ b,
UInt64Array,
u64
)
@@ -590,7 +573,7 @@ pub(crate) fn bitwise_shift_right_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i8, b: i8| a.wrapping_shr(b as u32),
+ |a: i8| move |b: i8| b.wrapping_shr(a as u32),
Int8Array,
i8
)
@@ -599,7 +582,7 @@ pub(crate) fn bitwise_shift_right_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i16, b: i16| a.wrapping_shr(b as u32),
+ |a: i16| move |b: i16| b.wrapping_shr(a as u32),
Int16Array,
i16
)
@@ -608,7 +591,7 @@ pub(crate) fn bitwise_shift_right_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i32, b: i32| a.wrapping_shr(b as u32),
+ |a: i32| move |b: i32| b.wrapping_shr(a as u32),
Int32Array,
i32
)
@@ -617,7 +600,7 @@ pub(crate) fn bitwise_shift_right_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i64, b: i64| a.wrapping_shr(b as u32),
+ |a: i64| move |b: i64| b.wrapping_shr(a as u32),
Int64Array,
i64
)
@@ -626,7 +609,7 @@ pub(crate) fn bitwise_shift_right_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u8, b: u8| a.wrapping_shr(b as u32),
+ |a: u8| move |b: u8| b.wrapping_shr(a as u32),
UInt8Array,
u8
)
@@ -635,7 +618,7 @@ pub(crate) fn bitwise_shift_right_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u16, b: u16| a.wrapping_shr(b as u32),
+ |a: u16| move |b: u16| b.wrapping_shr(a as u32),
UInt16Array,
u16
)
@@ -644,7 +627,7 @@ pub(crate) fn bitwise_shift_right_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u32, b: u32| a.wrapping_shr(b),
+ |a: u32| move |b: u32| b.wrapping_shr(a),
UInt32Array,
u32
)
@@ -653,7 +636,7 @@ pub(crate) fn bitwise_shift_right_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u64, b: u32| a.wrapping_shr(b),
+ |a: u32| move |b: u64| b.wrapping_shr(a),
UInt64Array,
u32
)
@@ -676,7 +659,7 @@ pub(crate) fn bitwise_shift_left_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i8, b: i8| a.wrapping_shl(b as u32),
+ |a: i8| move |b: i8| b.wrapping_shl(a as u32),
Int8Array,
i8
)
@@ -685,7 +668,7 @@ pub(crate) fn bitwise_shift_left_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i16, b: i16| a.wrapping_shl(b as u32),
+ |a: i16| move |b: i16| b.wrapping_shl(a as u32),
Int16Array,
i16
)
@@ -694,7 +677,7 @@ pub(crate) fn bitwise_shift_left_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i32, b: i32| a.wrapping_shl(b as u32),
+ |a: i32| move |b: i32| b.wrapping_shl(a as u32),
Int32Array,
i32
)
@@ -703,7 +686,7 @@ pub(crate) fn bitwise_shift_left_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: i64, b: i64| a.wrapping_shl(b as u32),
+ |a: i64| move |b: i64| b.wrapping_shl(a as u32),
Int64Array,
i64
)
@@ -712,7 +695,7 @@ pub(crate) fn bitwise_shift_left_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u8, b: u8| a.wrapping_shl(b as u32),
+ |a: u8| move |b: u8| b.wrapping_shl(a as u32),
UInt8Array,
u8
)
@@ -721,7 +704,7 @@ pub(crate) fn bitwise_shift_left_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u16, b: u16| a.wrapping_shl(b as u32),
+ |a: u16| move |b: u16| b.wrapping_shl(a as u32),
UInt16Array,
u16
)
@@ -730,7 +713,7 @@ pub(crate) fn bitwise_shift_left_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u32, b: u32| a.wrapping_shl(b),
+ |a: u32| move |b: u32| b.wrapping_shl(a),
UInt32Array,
u32
)
@@ -739,7 +722,7 @@ pub(crate) fn bitwise_shift_left_scalar(
binary_bitwise_array_scalar!(
array,
scalar,
- |a: u64, b: u32| a.wrapping_shr(b),
+ |a: u32| move |b: u64| b.wrapping_shr(a),
UInt64Array,
u32
)