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(())
}