Skip to main content

vortex_array/arrays/map/vtable/
operations.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_error::VortexResult;
5
6use crate::ExecutionCtx;
7use crate::array::ArrayView;
8use crate::array::OperationsVTable;
9use crate::arrays::Map;
10use crate::arrays::StructArray;
11use crate::arrays::map::MapArrayExt;
12use crate::arrays::struct_::StructArrayExt;
13use crate::scalar::Scalar;
14
15impl OperationsVTable<Map> for Map {
16    fn scalar_at(
17        array: ArrayView<'_, Map>,
18        index: usize,
19        ctx: &mut ExecutionCtx,
20    ) -> VortexResult<Scalar> {
21        let entries = array.entries_at(index)?.execute::<StructArray>(ctx)?;
22        let keys = entries.unmasked_field(0);
23        let values = entries.unmasked_field(1);
24        let pairs = (0..entries.len())
25            .map(|entry_index| {
26                Ok((
27                    keys.execute_scalar(entry_index, ctx)?,
28                    values.execute_scalar(entry_index, ctx)?,
29                ))
30            })
31            .collect::<VortexResult<Vec<_>>>()?;
32
33        Scalar::try_map(array.dtype().clone(), pairs)
34    }
35}