@@ -452,4 +452,37 @@ mod test {
452452
453453 Ok ( ( ) )
454454 }
455+
456+ #[ test]
457+ fn test_array_insert_bug_repro_null_item_pos1_fixed ( ) -> Result < ( ) > {
458+ use arrow:: array:: { Array , ArrayRef , Int32Array , ListArray } ;
459+ use arrow:: datatypes:: Int32Type ;
460+
461+ // row0 = [0, null, 0]
462+ // row1 = [1, null, 1]
463+ let list = ListArray :: from_iter_primitive :: < Int32Type , _ , _ > ( vec ! [
464+ Some ( vec![ Some ( 0 ) , None , Some ( 0 ) ] ) ,
465+ Some ( vec![ Some ( 1 ) , None , Some ( 1 ) ] ) ,
466+ ] ) ;
467+
468+ let positions = Int32Array :: from ( vec ! [ 1 , 1 ] ) ;
469+ let items = Int32Array :: from ( vec ! [ None , None ] ) ;
470+
471+ let ColumnarValue :: Array ( result) = array_insert (
472+ & list,
473+ & ( Arc :: new ( items) as ArrayRef ) ,
474+ & ( Arc :: new ( positions) as ArrayRef ) ,
475+ false , // legacy_mode = false
476+ ) ?
477+ else {
478+ unreachable ! ( )
479+ } ;
480+
481+ let expected = ListArray :: from_iter_primitive :: < Int32Type , _ , _ > ( vec ! [
482+ Some ( vec![ None , Some ( 0 ) , None , Some ( 0 ) ] ) ,
483+ Some ( vec![ None , Some ( 1 ) , None , Some ( 1 ) ] )
484+ ] ) ;
485+ assert_eq ! ( & result. to_data( ) , & expected. to_data( ) ) ;
486+ Ok ( ( ) )
487+ }
455488}
0 commit comments