vortex_array/arrays/constant/compute/
binary_numeric.rs

1use 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}