vortex_dict/compute/
like.rs

1use vortex_array::arrays::ConstantArray;
2use vortex_array::compute::{LikeFn, LikeOptions, like};
3use vortex_array::{Array, ArrayRef};
4use vortex_error::VortexResult;
5
6use crate::{DictArray, DictEncoding};
7
8impl LikeFn<&DictArray> for DictEncoding {
9    fn like(
10        &self,
11        array: &DictArray,
12        pattern: &dyn Array,
13        options: LikeOptions,
14    ) -> VortexResult<Option<ArrayRef>> {
15        // if we have more values than codes, it is faster to canonicalise first.
16        if array.values().len() > array.codes().len() {
17            return Ok(None);
18        }
19        if let Some(pattern) = pattern.as_constant() {
20            let pattern = ConstantArray::new(pattern, array.values().len()).into_array();
21            let values = like(array.values(), &pattern, options)?;
22            Ok(Some(
23                DictArray::try_new(array.codes().clone(), values)?.into_array(),
24            ))
25        } else {
26            Ok(None)
27        }
28    }
29}