vortex_array/arrays/varbin/compute/
mask.rs

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