@@ -53,6 +53,7 @@ use vortex_buffer::Buffer;
5353use vortex_dtype:: DType ;
5454use vortex_dtype:: IntegerPType ;
5555use vortex_dtype:: PType ;
56+ use vortex_dtype:: PTypeDowncastExt ;
5657use vortex_error:: VortexExpect ;
5758use vortex_error:: VortexResult ;
5859use vortex_error:: vortex_bail;
@@ -62,7 +63,8 @@ use vortex_scalar::DecimalType;
6263use crate :: Array as _;
6364use crate :: Canonical ;
6465use crate :: IntoArray ;
65- use crate :: ToCanonical ;
66+ use crate :: LEGACY_SESSION ;
67+ use crate :: VectorExecutor ;
6668use crate :: arrays:: BoolArray ;
6769use crate :: arrays:: DecimalArray ;
6870use crate :: arrays:: FixedSizeListArray ;
@@ -75,11 +77,15 @@ use crate::arrays::list_from_list_view;
7577use crate :: arrow:: IntoArrowArray ;
7678use crate :: arrow:: array:: ArrowArray ;
7779use crate :: arrow:: compute:: ToArrowArgs ;
80+ <<<<<<< Updated upstream
7881use crate :: arrow:: null_buffer:: to_null_buffer ;
82+ =======
83+ use crate :: arrow:: compute:: to_arrow:: null_buffer:: to_null_buffer ;
84+ use crate :: builtins:: ArrayBuiltins ;
85+ >>>>>>> Stashed changes
7986use crate :: compute:: InvocationArgs ;
8087use crate :: compute:: Kernel ;
8188use crate :: compute:: Output ;
82- use crate :: compute:: cast;
8389
8490/// Implementation of `ToArrow` kernel for canonical Vortex arrays.
8591 #[ derive ( Debug ) ]
@@ -555,9 +561,13 @@ fn to_arrow_list<O: IntegerPType + OffsetSizeTrait>(
555561 } ;
556562
557563 // Convert the child `offsets` and `validity` array to Arrow.
558- let offsets = cast ( list_array. offsets ( ) . as_ref ( ) , & DType :: from ( O :: PTYPE ) ) ?
559- . to_primitive ( )
560- . buffer :: < O > ( )
564+ let offsets = list_array
565+ . offsets( )
566+ . cast( DType :: from( O :: PTYPE ) ) ?
567+ . execute_vector( & LEGACY_SESSION ) ?
568+ . into_primitive( )
569+ . downcast :: < O > ( )
570+ . into_buffer( )
561571 . into_arrow_offset_buffer( ) ;
562572 let nulls = to_null_buffer( list_array. validity_mask( ) ) ;
563573
@@ -576,16 +586,24 @@ fn to_arrow_listview<O: IntegerPType + OffsetSizeTrait>(
576586) -> VortexResult < ArrowArrayRef > {
577587 // First we cast the offsets and sizes into the specified width (determined by `O::PTYPE`).
578588 let offsets_dtype = DType :: Primitive ( O :: PTYPE , array. dtype( ) . nullability( ) ) ;
579- let offsets = cast ( array. offsets ( ) , & offsets_dtype)
580- . map_err ( |err| err. with_context ( format ! ( "Failed to cast offsets to {offsets_dtype}" ) ) ) ?
581- . to_primitive ( ) ;
582- let sizes = cast ( array. sizes ( ) , & offsets_dtype)
583- . map_err ( |err| err. with_context ( format ! ( "Failed to cast sizes to {offsets_dtype}" ) ) ) ?
584- . to_primitive ( ) ;
589+ let offsets = array
590+ . offsets( )
591+ . cast( offsets_dtype. clone( ) ) ?
592+ . execute_vector( & LEGACY_SESSION ) ?
593+ . into_primitive( )
594+ . downcast :: < O > ( )
595+ . into_buffer( )
596+ . into_arrow_scalar_buffer( ) ;
597+ let sizes = array
598+ . sizes( )
599+ . cast( offsets_dtype) ?
600+ . execute_vector( & LEGACY_SESSION ) ?
601+ . into_primitive( )
602+ . downcast :: < O > ( )
603+ . into_buffer( )
604+ . into_arrow_scalar_buffer( ) ;
585605
586606 // Convert `offsets`, `sizes`, and `validity` to Arrow buffers.
587- let arrow_offsets = offsets. buffer :: < O > ( ) . into_arrow_scalar_buffer ( ) ;
588- let arrow_sizes = sizes. buffer :: < O > ( ) . into_arrow_scalar_buffer ( ) ;
589607 let nulls = to_null_buffer( array. validity_mask( ) ) ;
590608
591609 // Convert the child `elements` array to Arrow.
@@ -609,8 +627,8 @@ fn to_arrow_listview<O: IntegerPType + OffsetSizeTrait>(
609627
610628 Ok ( Arc :: new( GenericListViewArray :: new(
611629 element_field,
612- arrow_offsets ,
613- arrow_sizes ,
630+ offsets ,
631+ sizes ,
614632 elements,
615633 nulls,
616634 ) ) )
0 commit comments