use crate::{
array::{BooleanArray, Offset, Utf8Array},
bitmap::Bitmap,
datatypes::DataType,
};
pub fn combine_validities(lhs: Option<&Bitmap>, rhs: Option<&Bitmap>) -> Option<Bitmap> {
match (lhs, rhs) {
(Some(lhs), None) => Some(lhs.clone()),
(None, Some(rhs)) => Some(rhs.clone()),
(None, None) => None,
(Some(lhs), Some(rhs)) => Some(lhs & rhs),
}
}
pub fn unary_utf8_boolean<O: Offset, F: Fn(&str) -> bool>(
values: &Utf8Array<O>,
op: F,
) -> BooleanArray {
let validity = values.validity().cloned();
let iterator = values.iter().map(|value| {
if value.is_none() {
return false;
};
op(value.unwrap())
});
let values = Bitmap::from_trusted_len_iter(iterator);
BooleanArray::from_data(DataType::Boolean, values, validity)
}