vortex_array/arrays/varbin/compute/
mask.rs

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