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