vortex_array/arrays/constant/compute/
binary_numeric.rs1use vortex_error::{VortexResult, vortex_err};
2use vortex_scalar::BinaryNumericOperator;
3
4use crate::arrays::{ConstantArray, ConstantEncoding};
5use crate::compute::BinaryNumericFn;
6use crate::{Array, ArrayRef};
7
8impl BinaryNumericFn<&ConstantArray> for ConstantEncoding {
9 fn binary_numeric(
10 &self,
11 array: &ConstantArray,
12 rhs: &dyn Array,
13 op: BinaryNumericOperator,
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}