vortex_array/arrays/extension/compute/
compare.rs1use vortex_error::VortexResult;
5
6use crate::ArrayRef;
7use crate::ExecutionCtx;
8use crate::IntoArray;
9use crate::array::ArrayView;
10use crate::arrays::ConstantArray;
11use crate::arrays::Extension;
12use crate::arrays::extension::ExtensionArrayExt;
13use crate::builtins::ArrayBuiltins;
14use crate::scalar_fn::fns::binary::CompareKernel;
15use crate::scalar_fn::fns::operators::CompareOperator;
16use crate::scalar_fn::fns::operators::Operator;
17
18impl CompareKernel for Extension {
19 fn compare(
20 lhs: ArrayView<'_, Extension>,
21 rhs: &ArrayRef,
22 operator: CompareOperator,
23 _ctx: &mut ExecutionCtx,
24 ) -> VortexResult<Option<ArrayRef>> {
25 if !lhs.dtype().eq_ignore_nullability(rhs.dtype()) {
28 return Ok(None);
29 }
30
31 if let Some(const_ext) = rhs.as_constant() {
33 let storage_scalar = const_ext.as_extension().to_storage_scalar();
34 return lhs
35 .storage_array()
36 .clone()
37 .binary(
38 ConstantArray::new(storage_scalar, lhs.len()).into_array(),
39 Operator::from(operator),
40 )
41 .map(Some);
42 }
43
44 if let Some(rhs_ext) = rhs.as_opt::<Extension>() {
46 return lhs
47 .storage_array()
48 .clone()
49 .binary(rhs_ext.storage_array().clone(), Operator::from(operator))
50 .map(Some);
51 }
52
53 Ok(None)
55 }
56}