@@ -29,6 +29,7 @@ use vortex_array::patches::PatchesMetadata;
2929use vortex_array:: serde:: ArrayChildren ;
3030use vortex_array:: stats:: ArrayStats ;
3131use vortex_array:: stats:: StatsSetRef ;
32+ use vortex_array:: validity:: Validity ;
3233use vortex_array:: vtable;
3334use vortex_array:: vtable:: ArrayId ;
3435use vortex_array:: vtable:: ArrayVTable ;
@@ -410,6 +411,28 @@ impl ValidityVTable<SparseVTable> for SparseVTable {
410411 array. patches ( ) . values ( ) . all_invalid ( )
411412 }
412413
414+ fn validity ( array : & SparseArray ) -> VortexResult < Validity > {
415+ let patches = unsafe {
416+ Patches :: new_unchecked (
417+ array. patches . array_len ( ) ,
418+ array. patches . offset ( ) ,
419+ array. patches . indices ( ) . clone ( ) ,
420+ array
421+ . patches
422+ . values ( )
423+ . validity ( ) ?
424+ . to_array ( array. patches . values ( ) . len ( ) ) ,
425+ array. patches . chunk_offsets ( ) . clone ( ) ,
426+ array. patches . offset_within_chunk ( ) ,
427+ )
428+ } ;
429+
430+ Ok ( Validity :: Array (
431+ unsafe { SparseArray :: new_unchecked ( patches, array. fill_value . is_valid ( ) . into ( ) ) }
432+ . into_array ( ) ,
433+ ) )
434+ }
435+
413436 fn validity_mask ( array : & SparseArray ) -> Mask {
414437 let fill_is_valid = array. fill_scalar ( ) . is_valid ( ) ;
415438 let values_validity = array. patches ( ) . values ( ) . validity_mask ( ) ;
0 commit comments