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 type ProbeState = ();
17
18 fn scalar_at(
19 array: ArrayView<'_, Map>,
20 index: usize,
21 ctx: &mut ExecutionCtx,
22 ) -> VortexResult<Scalar> {
23 let entries = array.entries_at(index)?.execute::<StructArray>(ctx)?;
24 let keys = entries.unmasked_field(0);
25 let values = entries.unmasked_field(1);
26 let pairs = (0..entries.len())
27 .map(|entry_index| {
28 Ok((
29 keys.execute_scalar(entry_index, ctx)?,
30 values.execute_scalar(entry_index, ctx)?,
31 ))
32 })
33 .collect::<VortexResult<Vec<_>>>()?;
34
35 Scalar::try_map(array.dtype().clone(), pairs)
36 }
37}