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 9c9acb7  fix: Support length on slices with null (#745)
9c9acb7 is described below

commit 9c9acb73c9bc22d3459b47b66b5f459099415c40
Author: Ben Chambers <[email protected]>
AuthorDate: Sun Sep 12 04:02:34 2021 -0700

    fix: Support length on slices with null (#745)
    
    * fix: Support length on slices with null
    
    * actually test length
---
 arrow/src/compute/kernels/length.rs | 35 ++++++++++++-----------------------
 1 file changed, 12 insertions(+), 23 deletions(-)

diff --git a/arrow/src/compute/kernels/length.rs 
b/arrow/src/compute/kernels/length.rs
index ad2bc16..fb76d00 100644
--- a/arrow/src/compute/kernels/length.rs
+++ b/arrow/src/compute/kernels/length.rs
@@ -53,9 +53,8 @@ where
 
     let null_bit_buffer = array
         .data_ref()
-        .null_bitmap()
-        .as_ref()
-        .map(|b| b.bits.clone());
+        .null_buffer()
+        .map(|b| b.bit_slice(array.offset(), array.len()));
 
     let data = ArrayData::new(
         data_type,
@@ -243,18 +242,13 @@ mod tests {
     /// Tests with an offset
     #[test]
     fn length_offsets() -> Result<()> {
-        let a = StringArray::from(vec!["hello", " ", "world"]);
-        let b = make_array(
-            ArrayData::builder(DataType::Utf8)
-                .len(2)
-                .offset(1)
-                .buffers(a.data_ref().buffers().to_vec())
-                .build(),
-        );
+        let a = StringArray::from(vec![Some("hello"), Some(" "), 
Some("world"), None]);
+        let b = a.slice(1, 3);
         let result = length(b.as_ref())?;
+        let result: &Int32Array = as_primitive_array(&result);
 
-        let expected = Int32Array::from(vec![1, 5]);
-        assert_eq!(expected.data(), result.data());
+        let expected = Int32Array::from(vec![Some(1), Some(5), None]);
+        assert_eq!(&expected, result);
 
         Ok(())
     }
@@ -371,18 +365,13 @@ mod tests {
     /// Tests with an offset
     #[test]
     fn bit_length_offsets() -> Result<()> {
-        let a = StringArray::from(vec!["hello", " ", "world"]);
-        let b = make_array(
-            ArrayData::builder(DataType::Utf8)
-                .len(2)
-                .offset(1)
-                .buffers(a.data_ref().buffers().to_vec())
-                .build(),
-        );
+        let a = StringArray::from(vec![Some("hello"), Some(" "), 
Some("world"), None]);
+        let b = a.slice(1, 3);
         let result = bit_length(b.as_ref())?;
+        let result: &Int32Array = as_primitive_array(&result);
 
-        let expected = Int32Array::from(vec![8, 40]);
-        assert_eq!(expected.data(), result.data());
+        let expected = Int32Array::from(vec![Some(8), Some(40), None]);
+        assert_eq!(&expected, result);
 
         Ok(())
     }

Reply via email to