Skip to main content

vortex_array/arrays/list/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::List;
12use crate::arrays::list::ListArrayExt;
13use crate::scalar::Scalar;
14
15impl OperationsVTable<List> for List {
16    type ProbeState = ();
17
18    fn scalar_at(
19        array: ArrayView<'_, List>,
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 elems = array.list_elements_at(index)?;
25        let scalars: Vec<Scalar> = (0..elems.len())
26            .map(|i| elems.execute_scalar(i, ctx))
27            .collect::<VortexResult<_>>()?;
28
29        Ok(Scalar::list(
30            Arc::new(elems.dtype().clone()),
31            scalars,
32            array.dtype().nullability(),
33        ))
34    }
35}