vortex_array/arrays/varbin/compute/
mask.rs1use 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}