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