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;
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());