vortex_array/arrays/decimal/compute/
scalar_at.rs1use vortex_error::VortexResult;
2use vortex_scalar::Scalar;
3
4use crate::arrays::{DecimalArray, DecimalEncoding};
5use crate::compute::ScalarAtFn;
6use crate::{Array, match_each_decimal_value_type};
7
8impl ScalarAtFn<&DecimalArray> for DecimalEncoding {
9 fn scalar_at(&self, array: &DecimalArray, index: usize) -> VortexResult<Scalar> {
10 let scalar = match_each_decimal_value_type!(array.values_type(), |($D, $CTor)| {
11 Scalar::decimal(
12 $CTor(array.buffer::<$D>()[index]),
13 array.decimal_dtype(),
14 array.dtype().nullability(),
15 )
16 });
17 Ok(scalar)
18 }
19}
20
21#[cfg(test)]
22mod tests {
23 use vortex_buffer::buffer;
24 use vortex_dtype::{DecimalDType, Nullability};
25 use vortex_scalar::{DecimalValue, Scalar};
26
27 use crate::arrays::DecimalArray;
28 use crate::compute::scalar_at;
29 use crate::validity::Validity;
30
31 #[test]
32 fn test_scalar_at() {
33 let array = DecimalArray::new(
34 buffer![100i128],
35 DecimalDType::new(3, 2),
36 Validity::NonNullable,
37 );
38
39 assert_eq!(
40 scalar_at(&array, 0).unwrap(),
41 Scalar::decimal(
42 DecimalValue::I128(100),
43 DecimalDType::new(3, 2),
44 Nullability::NonNullable
45 )
46 );
47 }
48}