vortex_array/arrays/constant/compute/
binary_numeric.rs

1use vortex_error::{VortexResult, vortex_err};
2use vortex_scalar::NumericOperator;
3
4use crate::arrays::{ConstantArray, ConstantVTable};
5use crate::compute::{NumericKernel, NumericKernelAdapter};
6use crate::{Array, ArrayRef, IntoArray, register_kernel};
7
8impl NumericKernel for ConstantVTable {
9    fn numeric(
10        &self,
11        array: &ConstantArray,
12        rhs: &dyn Array,
13        op: NumericOperator,
14    ) -> VortexResult<Option<ArrayRef>> {
15        let Some(rhs) = rhs.as_constant() else {
16            return Ok(None);
17        };
18
19        Ok(Some(
20            ConstantArray::new(
21                array
22                    .scalar()
23                    .as_primitive()
24                    .checked_binary_numeric(&rhs.as_primitive(), op)
25                    .ok_or_else(|| vortex_err!("numeric overflow"))?,
26                array.len(),
27            )
28            .into_array(),
29        ))
30    }
31}
32
33register_kernel!(NumericKernelAdapter(ConstantVTable).lift());