vortex_array/arrays/varbin/compute/
mask.rs

1use vortex_error::VortexResult;
2use vortex_mask::Mask;
3
4use crate::arrays::VarBinVTable;
5use crate::arrays::varbin::VarBinArray;
6use crate::compute::{MaskKernel, MaskKernelAdapter};
7use crate::vtable::ValidityHelper;
8use crate::{ArrayRef, IntoArray, register_kernel};
9
10impl MaskKernel for VarBinVTable {
11    fn mask(&self, array: &VarBinArray, mask: &Mask) -> VortexResult<ArrayRef> {
12        Ok(VarBinArray::try_new(
13            array.offsets().clone(),
14            array.bytes().clone(),
15            array.dtype().as_nullable(),
16            array.validity().mask(mask)?,
17        )?
18        .into_array())
19    }
20}
21
22register_kernel!(MaskKernelAdapter(VarBinVTable).lift());
23
24#[cfg(test)]
25mod test {
26    use vortex_dtype::{DType, Nullability};
27
28    use crate::arrays::VarBinArray;
29    use crate::compute::conformance::mask::test_mask;
30
31    #[test]
32    fn test_mask_var_bin_array() {
33        let array = VarBinArray::from_vec(
34            vec!["hello", "world", "filter", "good", "bye"],
35            DType::Utf8(Nullability::NonNullable),
36        );
37        test_mask(array.as_ref());
38
39        let array = VarBinArray::from_iter(
40            vec![Some("hello"), None, Some("filter"), Some("good"), None],
41            DType::Utf8(Nullability::Nullable),
42        );
43        test_mask(array.as_ref());
44    }
45}