This is an automated email from the ASF dual-hosted git repository.

tustvold 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 9649d0814 support FixedSizeBinary types in 
eq_dyn_binary_scalar/neq_dyn_binary_scalar (#4492)
9649d0814 is described below

commit 9649d081497f7ef22725bb430b67db8d75ebbbec
Author: Max Burke <[email protected]>
AuthorDate: Sat Jul 8 14:18:11 2023 -0700

    support FixedSizeBinary types in eq_dyn_binary_scalar/neq_dyn_binary_scalar 
(#4492)
---
 arrow-ord/src/comparison.rs | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/arrow-ord/src/comparison.rs b/arrow-ord/src/comparison.rs
index 4f8b9a322..d18b0e36e 100644
--- a/arrow-ord/src/comparison.rs
+++ b/arrow-ord/src/comparison.rs
@@ -841,9 +841,13 @@ pub fn eq_dyn_binary_scalar(
 ) -> Result<BooleanArray, ArrowError> {
     match left.data_type() {
         DataType::Binary => eq_binary_scalar(left.as_binary::<i32>(), right),
+        DataType::FixedSizeBinary(_) => {
+            let left = 
left.as_any().downcast_ref::<FixedSizeBinaryArray>().unwrap();
+            compare_op_scalar(left, |a| a == right)
+        }
         DataType::LargeBinary => eq_binary_scalar(left.as_binary::<i64>(), 
right),
         _ => Err(ArrowError::ComputeError(
-            "eq_dyn_binary_scalar only supports Binary or LargeBinary 
arrays".to_string(),
+            "eq_dyn_binary_scalar only supports Binary / FixedSizeBinary / 
LargeBinary arrays".to_string(),
         )),
     }
 }
@@ -857,8 +861,12 @@ pub fn neq_dyn_binary_scalar(
     match left.data_type() {
         DataType::Binary => neq_binary_scalar(left.as_binary::<i32>(), right),
         DataType::LargeBinary => neq_binary_scalar(left.as_binary::<i64>(), 
right),
+        DataType::FixedSizeBinary(_) => {
+            let left = 
left.as_any().downcast_ref::<FixedSizeBinaryArray>().unwrap();
+            compare_op_scalar(left, |a| a != right)
+        }
         _ => Err(ArrowError::ComputeError(
-            "neq_dyn_binary_scalar only supports Binary or LargeBinary arrays"
+            "neq_dyn_binary_scalar only supports Binary / FixedSizeBinary / 
LargeBinary arrays"
                 .to_string(),
         )),
     }
@@ -4276,6 +4284,15 @@ mod tests {
             eq_dyn_binary_scalar(&large_array, scalar).unwrap(),
             expected
         );
+
+        let fsb_array = FixedSizeBinaryArray::try_from_iter(
+            vec![vec![0u8], vec![0u8], vec![0u8], vec![1u8]].into_iter(),
+        )
+        .unwrap();
+        let scalar = &[1u8];
+        let expected =
+            BooleanArray::from(vec![Some(false), Some(false), Some(false), 
Some(true)]);
+        assert_eq!(eq_dyn_binary_scalar(&fsb_array, scalar).unwrap(), 
expected);
     }
 
     #[test]
@@ -4293,6 +4310,15 @@ mod tests {
             neq_dyn_binary_scalar(&large_array, scalar).unwrap(),
             expected
         );
+
+        let fsb_array = FixedSizeBinaryArray::try_from_iter(
+            vec![vec![0u8], vec![0u8], vec![0u8], vec![1u8]].into_iter(),
+        )
+        .unwrap();
+        let scalar = &[1u8];
+        let expected =
+            BooleanArray::from(vec![Some(true), Some(true), Some(true), 
Some(false)]);
+        assert_eq!(neq_dyn_binary_scalar(&fsb_array, scalar).unwrap(), 
expected);
     }
 
     #[test]

Reply via email to