Skip to content

Commit 704f90b

Browse files
authored
Add support for BinaryView in arrow_string::length (#6359)
* Add support for BinaryView in arrow_string::length * Adding a longer binary value to binary view test.
1 parent 7a5155c commit 704f90b

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

arrow-string/src/length.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,14 @@ pub fn length(array: &dyn Array) -> Result<ArrayRef, ArrowError> {
9393
DataType::FixedSizeBinary(len) | DataType::FixedSizeList(_, len) => Ok(Arc::new(
9494
Int32Array::new(vec![*len; array.len()].into(), array.nulls().cloned()),
9595
)),
96+
DataType::BinaryView => {
97+
let list = array.as_binary_view();
98+
let v = list.views().iter().map(|v| *v as i32).collect::<Vec<_>>();
99+
Ok(Arc::new(PrimitiveArray::<Int32Type>::new(
100+
v.into(),
101+
list.nulls().cloned(),
102+
)))
103+
}
96104
other => Err(ArrowError::ComputeError(format!(
97105
"length not supported for {other:?}"
98106
))),
@@ -253,6 +261,23 @@ mod tests {
253261
length_binary_helper!(i64, Int64Array, length, value, result)
254262
}
255263

264+
#[test]
265+
fn length_test_binary_view() {
266+
let value: Vec<&[u8]> = vec![
267+
b"zero",
268+
&[0xff, 0xf8],
269+
b"two",
270+
b"this is a longer string to test binary array with",
271+
];
272+
let expected: Vec<i32> = vec![4, 2, 3, 49];
273+
274+
let array = BinaryViewArray::from(value);
275+
let result = length(&array).unwrap();
276+
let result = result.as_any().downcast_ref::<Int32Array>().unwrap();
277+
let expected: Int32Array = expected.into();
278+
assert_eq!(&expected, result);
279+
}
280+
256281
#[test]
257282
fn length_test_list() {
258283
let value = vec![

0 commit comments

Comments
 (0)