vortex_array/arrays/constant/compute/
compare.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_error::VortexResult;
5
6use crate::Array;
7use crate::ArrayRef;
8use crate::IntoArray;
9use crate::arrays::ConstantArray;
10use crate::arrays::ConstantVTable;
11use crate::compute::CompareKernel;
12use crate::compute::CompareKernelAdapter;
13use crate::compute::Operator;
14use crate::compute::scalar_cmp;
15use crate::register_kernel;
16
17impl CompareKernel for ConstantVTable {
18    fn compare(
19        &self,
20        lhs: &ConstantArray,
21        rhs: &dyn Array,
22        operator: Operator,
23    ) -> VortexResult<Option<ArrayRef>> {
24        // We only support comparing a constant array to another constant array.
25        // For all other encodings, we assume the constant is on the RHS.
26        if let Some(const_scalar) = rhs.as_constant() {
27            let lhs_scalar = lhs.scalar();
28            let scalar = scalar_cmp(lhs_scalar, &const_scalar, operator);
29            return Ok(Some(ConstantArray::new(scalar, lhs.len()).into_array()));
30        }
31
32        Ok(None)
33    }
34}
35
36register_kernel!(CompareKernelAdapter(ConstantVTable).lift());