Skip to content

Commit e8323ac

Browse files
authored
fix: RunEnd array correctly encodes all null arrays (#1675)
1 parent 528b760 commit e8323ac

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

encodings/runend/src/compress.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub fn runend_encode(array: &PrimitiveArray) -> VortexResult<(PrimitiveArray, Ar
1818
// We can trivially return an all-null REE array
1919
return Ok((
2020
PrimitiveArray::from(vec![array.len() as u64]),
21-
ConstantArray::new(Scalar::null(array.dtype().clone()), array.len()).into_array(),
21+
ConstantArray::new(Scalar::null(array.dtype().clone()), 1).into_array(),
2222
));
2323
}
2424
Validity::Array(a) => Some(a.into_bool()?.boolean_buffer()),
@@ -304,6 +304,19 @@ mod test {
304304
assert_eq!(values.maybe_null_slice::<i32>(), vec![1, 0, 2, 3, 0]);
305305
}
306306

307+
#[test]
308+
fn encode_all_null() {
309+
let arr = PrimitiveArray::from_vec(
310+
vec![0, 0, 0, 0, 0],
311+
Validity::from(BooleanBuffer::new_unset(5)),
312+
);
313+
let (ends, values) = runend_encode(&arr).unwrap();
314+
let values = values.into_primitive().unwrap();
315+
316+
assert_eq!(ends.maybe_null_slice::<u64>(), vec![5]);
317+
assert_eq!(values.maybe_null_slice::<i32>(), vec![0]);
318+
}
319+
307320
#[test]
308321
fn decode() {
309322
let ends = PrimitiveArray::from(vec![2, 5, 10]);

0 commit comments

Comments
 (0)