Skip to main content

vortex_array/arrays/chunked/vtable/
validity.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use itertools::Itertools;
5use vortex_error::VortexResult;
6
7use crate::array::ArrayView;
8use crate::array::ValidityVTable;
9use crate::arrays::Chunked;
10use crate::arrays::chunked::ChunkedArrayExt;
11use crate::validity::Validity;
12
13impl ValidityVTable<Chunked> for Chunked {
14    fn validity(array: ArrayView<'_, Chunked>) -> VortexResult<Validity> {
15        let validities = array
16            .chunks()
17            .iter()
18            .map(|chunk| chunk.validity().map(|v| (v, chunk.len())))
19            .try_collect()?;
20        let Some(validity) = Validity::concat(validities) else {
21            // If there are no chunks:
22            return Ok(array.dtype().nullability().into());
23        };
24
25        Ok(validity)
26    }
27}