Skip to main content

vortex_array/arrays/listview/vtable/
operations.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use std::sync::Arc;
5
6use vortex_error::VortexResult;
7
8use crate::ExecutionCtx;
9use crate::array::ArrayView;
10use crate::array::OperationsVTable;
11use crate::arrays::ListView;
12use crate::arrays::listview::ListViewArrayExt;
13use crate::scalar::Scalar;
14
15impl OperationsVTable<ListView> for ListView {
16    type ProbeState = ();
17
18    fn scalar_at(
19        array: ArrayView<'_, ListView>,
20        index: usize,
21        ctx: &mut ExecutionCtx,
22    ) -> VortexResult<Scalar> {
23        // By the preconditions we know that the list scalar is not null.
24        let list = array.list_elements_at(index)?;
25        let children: Vec<Scalar> = (0..list.len())
26            .map(|i| list.execute_scalar(i, ctx))
27            .collect::<VortexResult<_>>()?;
28
29        Ok(Scalar::list(
30            Arc::new(list.dtype().clone()),
31            children,
32            array.dtype().nullability(),
33        ))
34    }
35}