@@ -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) ]
304299mod 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