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