This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/master by this push:
new 1cbda7a Add gt dyn scalar kernel (#1116)
1cbda7a is described below
commit 1cbda7a754b7075fadf50c6935bd088ea0f49b42
Author: Matthew Turner <[email protected]>
AuthorDate: Sun Jan 2 06:47:28 2022 -0500
Add gt dyn scalar kernel (#1116)
* Add gt_dyn_scalar kernel
Co-authored-by: Andrew Lamb <[email protected]>
---
arrow/src/compute/kernels/comparison.rs | 64 +++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/arrow/src/compute/kernels/comparison.rs
b/arrow/src/compute/kernels/comparison.rs
index 60ba634..c4c9fa1 100644
--- a/arrow/src/compute/kernels/comparison.rs
+++ b/arrow/src/compute/kernels/comparison.rs
@@ -1193,6 +1193,42 @@ where
}
}
+/// Perform `left > right` operation on an array and a numeric scalar
+/// value. Supports PrimitiveArrays, and DictionaryArrays that have primitive
values
+pub fn gt_dyn_scalar<T>(left: Arc<dyn Array>, right: T) -> Result<BooleanArray>
+where
+ T: TryInto<i128> + Copy + std::fmt::Debug,
+{
+ match left.data_type() {
+ DataType::Dictionary(key_type, value_type) => match
value_type.as_ref() {
+ DataType::Int8
+ | DataType::Int16
+ | DataType::Int32
+ | DataType::Int64
+ | DataType::UInt8
+ | DataType::UInt16
+ | DataType::UInt32
+ | DataType::UInt64 => {dyn_compare_scalar!(&left, right, key_type,
gt_scalar)}
+ _ => Err(ArrowError::ComputeError(
+ "gt_dyn_scalar only supports PrimitiveArray or DictionaryArray
with Primitive values".to_string(),
+ ))
+ }
+ DataType::Int8
+ | DataType::Int16
+ | DataType::Int32
+ | DataType::Int64
+ | DataType::UInt8
+ | DataType::UInt16
+ | DataType::UInt32
+ | DataType::UInt64 => {
+ dyn_compare_scalar!(&left, right, gt_scalar)
+ }
+ _ => Err(ArrowError::ComputeError(
+ "gt_dyn_scalar only supports PrimitiveArray or DictionaryArray
with Primitive values".to_string(),
+ ))
+ }
+}
+
/// Perform `left == right` operation on an array and a numeric scalar
/// value. Supports StringArrays, and DictionaryArrays that have string values
pub fn eq_dyn_utf8_scalar(left: Arc<dyn Array>, right: &str) ->
Result<BooleanArray> {
@@ -3146,6 +3182,34 @@ mod tests {
}
#[test]
+ fn test_gt_dyn_scalar() {
+ let array = Int32Array::from(vec![6, 7, 8, 8, 10]);
+ let array = Arc::new(array);
+ let a_eq = gt_dyn_scalar(array, 8).unwrap();
+ assert_eq!(
+ a_eq,
+ BooleanArray::from(
+ vec![Some(false), Some(false), Some(false), Some(false),
Some(true)]
+ )
+ );
+ }
+ #[test]
+ fn test_gt_dyn_scalar_with_dict() {
+ let key_builder = PrimitiveBuilder::<Int8Type>::new(3);
+ let value_builder = PrimitiveBuilder::<Int32Type>::new(2);
+ let mut builder = PrimitiveDictionaryBuilder::new(key_builder,
value_builder);
+ builder.append(123).unwrap();
+ builder.append_null().unwrap();
+ builder.append(23).unwrap();
+ let array = Arc::new(builder.finish());
+ let a_eq = gt_dyn_scalar(array, 23).unwrap();
+ assert_eq!(
+ a_eq,
+ BooleanArray::from(vec![Some(true), None, Some(false)])
+ );
+ }
+
+ #[test]
fn test_eq_dyn_utf8_scalar() {
let array = StringArray::from(vec!["abc", "def", "xyz"]);
let array = Arc::new(array);