vortex_array/arrays/map/vtable/
operations.rs1use 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}