@@ -25,11 +25,11 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
2525 array. into_array ( )
2626 }
2727 Canonical :: Bool ( array) => {
28- let new_validity = apply_mask_to_validity ( array. validity ( ) , mask) ;
28+ let new_validity = array. validity ( ) . mask ( mask) ;
2929 BoolArray :: from_bit_buffer ( array. bit_buffer ( ) . clone ( ) , new_validity) . into_array ( )
3030 }
3131 Canonical :: Primitive ( array) => {
32- let new_validity = apply_mask_to_validity ( array. validity ( ) , mask) ;
32+ let new_validity = array. validity ( ) . mask ( mask) ;
3333 PrimitiveArray :: from_byte_buffer (
3434 array. byte_buffer ( ) . clone ( ) ,
3535 array. ptype ( ) ,
@@ -38,14 +38,14 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
3838 . into_array ( )
3939 }
4040 Canonical :: Decimal ( array) => {
41- let new_validity = apply_mask_to_validity ( array. validity ( ) , mask) ;
41+ let new_validity = array. validity ( ) . mask ( mask) ;
4242 match_each_decimal_value_type ! ( array. values_type( ) , |D | {
4343 DecimalArray :: new( array. buffer:: <D >( ) , array. decimal_dtype( ) , new_validity)
4444 . into_array( )
4545 } )
4646 }
4747 Canonical :: VarBinView ( array) => {
48- let new_validity = apply_mask_to_validity ( array. validity ( ) , mask) ;
48+ let new_validity = array. validity ( ) . mask ( mask) ;
4949 VarBinViewArray :: new (
5050 array. views ( ) . clone ( ) ,
5151 array. buffers ( ) . clone ( ) ,
@@ -55,7 +55,7 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
5555 . into_array ( )
5656 }
5757 Canonical :: List ( array) => {
58- let new_validity = apply_mask_to_validity ( array. validity ( ) , mask) ;
58+ let new_validity = array. validity ( ) . mask ( mask) ;
5959
6060 // SAFETY: Since we are only masking the validity and everything else comes from an
6161 // already valid `ListViewArray`, all of the invariants are still upheld.
@@ -71,7 +71,7 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
7171 . into_array ( )
7272 }
7373 Canonical :: FixedSizeList ( array) => {
74- let new_validity = apply_mask_to_validity ( array. validity ( ) , mask) ;
74+ let new_validity = array. validity ( ) . mask ( mask) ;
7575 FixedSizeListArray :: new (
7676 array. elements ( ) . clone ( ) ,
7777 array. list_size ( ) ,
@@ -81,7 +81,7 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
8181 . into_array ( )
8282 }
8383 Canonical :: Struct ( array) => {
84- let new_validity = apply_mask_to_validity ( array. validity ( ) , mask) ;
84+ let new_validity = array. validity ( ) . mask ( mask) ;
8585 StructArray :: try_new_with_dtype (
8686 array. fields ( ) . clone ( ) ,
8787 array. struct_fields ( ) . clone ( ) ,
@@ -113,24 +113,6 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
113113 } )
114114}
115115
116- fn apply_mask_to_validity ( validity : & Validity , mask : & Mask ) -> Validity {
117- match mask. bit_buffer ( ) {
118- AllOr :: All => Validity :: AllInvalid ,
119- AllOr :: None => validity. clone ( ) ,
120- AllOr :: Some ( make_invalid) => match validity {
121- Validity :: NonNullable | Validity :: AllValid => {
122- Validity :: Array ( BoolArray :: from ( make_invalid. not ( ) ) . into_array ( ) )
123- }
124- Validity :: AllInvalid => Validity :: AllInvalid ,
125- Validity :: Array ( is_valid) => {
126- let is_valid = is_valid. to_bool ( ) ;
127- let keep_valid = make_invalid. not ( ) ;
128- Validity :: from ( is_valid. bit_buffer ( ) & & keep_valid)
129- }
130- } ,
131- }
132- }
133-
134116#[ cfg( test) ]
135117mod tests {
136118 use vortex_array:: arrays:: {
0 commit comments