vortex_array/arrays/dict/compute/
like.rs1use vortex_error::VortexResult;
5
6use super::{DictArray, DictVTable};
7use crate::arrays::ConstantArray;
8use crate::compute::{LikeKernel, LikeKernelAdapter, LikeOptions, like};
9use crate::{Array, ArrayRef, IntoArray, register_kernel};
10
11impl LikeKernel for DictVTable {
12 fn like(
13 &self,
14 array: &DictArray,
15 pattern: &dyn Array,
16 options: LikeOptions,
17 ) -> VortexResult<Option<ArrayRef>> {
18 if array.values().len() > array.codes().len() {
20 return Ok(None);
21 }
22 if let Some(pattern) = pattern.as_constant() {
23 let pattern = ConstantArray::new(pattern, array.values().len()).into_array();
24 let values = like(array.values(), &pattern, options)?;
25
26 unsafe {
29 Ok(Some(
30 DictArray::new_unchecked(array.codes().clone(), values).into_array(),
31 ))
32 }
33 } else {
34 Ok(None)
35 }
36 }
37}
38
39register_kernel!(LikeKernelAdapter(DictVTable).lift());