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