Skip to content

Commit 7f84c0e

Browse files
committed
Add a test for reversing a FixedSizeList with nulls
1 parent 7f3dc5c commit 7f84c0e

File tree

1 file changed

+29
-8
lines changed

1 file changed

+29
-8
lines changed

datafusion/functions-nested/src/reverse.rs

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,6 @@ fn fixed_size_array_reverse(
277277
let mut indices: Vec<u64> = Vec::with_capacity(values.len());
278278

279279
for row_index in 0..array.len() {
280-
// skip the null value
281-
if array.is_null(row_index) {
282-
indices.push(0);
283-
continue;
284-
}
285280
let start = row_index * value_length;
286281
let end = start + value_length;
287282
for idx in (start..end).rev() {
@@ -302,11 +297,11 @@ fn fixed_size_array_reverse(
302297

303298
#[cfg(test)]
304299
mod tests {
305-
use crate::reverse::list_view_reverse;
300+
use crate::reverse::{fixed_size_array_reverse, list_view_reverse};
306301
use arrow::{
307302
array::{
308-
AsArray, GenericListViewArray, Int32Array, LargeListViewArray, ListViewArray,
309-
OffsetSizeTrait,
303+
AsArray, FixedSizeListArray, GenericListViewArray, Int32Array,
304+
LargeListViewArray, ListViewArray, OffsetSizeTrait,
310305
},
311306
buffer::{NullBuffer, ScalarBuffer},
312307
datatypes::{DataType, Field, Int32Type},
@@ -323,6 +318,13 @@ mod tests {
323318
.collect()
324319
}
325320

321+
fn fixed_size_list_values(array: &FixedSizeListArray) -> Vec<Option<Vec<i32>>> {
322+
array
323+
.iter()
324+
.map(|x| x.map(|x| x.as_primitive::<Int32Type>().values().to_vec()))
325+
.collect()
326+
}
327+
326328
#[test]
327329
fn test_reverse_list_view() -> Result<()> {
328330
let field = Arc::new(Field::new("a", DataType::Int32, false));
@@ -461,4 +463,23 @@ mod tests {
461463
assert_eq!(expected, reversed);
462464
Ok(())
463465
}
466+
467+
#[test]
468+
fn test_reverse_fixed_size_list() -> Result<()> {
469+
let field = Arc::new(Field::new("a", DataType::Int32, false));
470+
let values = Arc::new(Int32Array::from(vec![1, 2, 3, 4, 5, 6, 7, 8, 9]));
471+
let result = fixed_size_array_reverse(
472+
&FixedSizeListArray::new(
473+
field,
474+
3,
475+
values,
476+
Some(NullBuffer::from(vec![true, false, true])),
477+
),
478+
&Arc::new(Field::new("test", DataType::Int32, true)),
479+
)?;
480+
let reversed = fixed_size_list_values(result.as_fixed_size_list());
481+
let expected = vec![Some(vec![3, 2, 1]), None, Some(vec![9, 8, 7])];
482+
assert_eq!(expected, reversed);
483+
Ok(())
484+
}
464485
}

0 commit comments

Comments
 (0)