@@ -331,6 +331,10 @@ func TestBuildStructArray(t *testing.T) {
331331 assert .False (t , arr .IsNull (0 ))
332332 assert .True (t , arr .IsNull (1 ))
333333 assert .False (t , arr .IsNull (2 ))
334+ sa := arr .(* array.Struct )
335+ xArr := sa .Field (0 ).(* array.Int32 )
336+ assert .Equal (t , int32 (99 ), xArr .Value (0 ))
337+ assert .Equal (t , int32 (99 ), xArr .Value (2 ))
334338 })
335339}
336340
@@ -370,6 +374,20 @@ func TestBuildListArray(t *testing.T) {
370374 assert .False (t , arr .IsNull (2 ))
371375 })
372376
377+ t .Run ("multi_level_pointer_list" , func (t * testing.T ) {
378+ a := []int32 {1 , 2 }
379+ pa := & a
380+ var nilPa * []int32
381+ vals := []* * []int32 {& pa , & nilPa , & pa }
382+ arr , err := buildArray (reflect .ValueOf (vals ), tagOpts {}, mem )
383+ require .NoError (t , err )
384+ defer arr .Release ()
385+ assert .Equal (t , 3 , arr .Len ())
386+ assert .False (t , arr .IsNull (0 ))
387+ assert .True (t , arr .IsNull (1 ))
388+ assert .False (t , arr .IsNull (2 ))
389+ })
390+
373391 t .Run ("string_lists" , func (t * testing.T ) {
374392 vals := [][]string {{"a" , "b" }, {"c" }}
375393 arr , err := buildArray (reflect .ValueOf (vals ), tagOpts {}, mem )
@@ -422,6 +440,20 @@ func TestBuildMapArray(t *testing.T) {
422440 kvArr := arr .(* array.Map ).ListValues ().(* array.Struct )
423441 assert .Equal (t , 3 , kvArr .Len (), "expected 3 key-value pairs, got %d" , kvArr .Len ())
424442 })
443+
444+ t .Run ("multi_level_pointer_map" , func (t * testing.T ) {
445+ m := map [string ]int32 {"x" : 1 }
446+ pm := & m
447+ var nilPm * map [string ]int32
448+ vals := []* * map [string ]int32 {& pm , & nilPm , & pm }
449+ arr , err := buildArray (reflect .ValueOf (vals ), tagOpts {}, mem )
450+ require .NoError (t , err )
451+ defer arr .Release ()
452+ assert .Equal (t , 3 , arr .Len ())
453+ assert .False (t , arr .IsNull (0 ))
454+ assert .True (t , arr .IsNull (1 ))
455+ assert .False (t , arr .IsNull (2 ))
456+ })
425457}
426458
427459func TestBuildFixedSizeListArray (t * testing.T ) {
@@ -470,6 +502,20 @@ func TestBuildFixedSizeListArray(t *testing.T) {
470502 assert .True (t , arr .IsNull (0 ), "nil slice should be null" )
471503 assert .False (t , arr .IsNull (1 ), "non-nil should not be null" )
472504 })
505+
506+ t .Run ("multi_level_pointer_fixed_size_list" , func (t * testing.T ) {
507+ a := [3 ]int32 {1 , 2 , 3 }
508+ pa := & a
509+ var nilPa * [3 ]int32
510+ vals := []* * [3 ]int32 {& pa , & nilPa , & pa }
511+ arr , err := buildArray (reflect .ValueOf (vals ), tagOpts {}, mem )
512+ require .NoError (t , err )
513+ defer arr .Release ()
514+ assert .Equal (t , 3 , arr .Len ())
515+ assert .False (t , arr .IsNull (0 ))
516+ assert .True (t , arr .IsNull (1 ))
517+ assert .False (t , arr .IsNull (2 ))
518+ })
473519}
474520
475521func TestBuildDictionaryArray (t * testing.T ) {
0 commit comments