vortex_array/arrays/constant/compute/
binary_numeric.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use 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());