vortex_array/arrays/varbinview/compute/
to_arrow.rs

1use arrow_array::ArrayRef;
2use arrow_cast::cast;
3use arrow_schema::DataType;
4use vortex_error::{VortexResult, vortex_bail};
5
6use crate::arrays::{VarBinViewArray, VarBinViewEncoding, varbinview_as_arrow};
7use crate::compute::ToArrowFn;
8
9impl ToArrowFn<&VarBinViewArray> for VarBinViewEncoding {
10    fn to_arrow(
11        &self,
12        array: &VarBinViewArray,
13        data_type: &DataType,
14    ) -> VortexResult<Option<ArrayRef>> {
15        match data_type {
16            DataType::Binary
17            | DataType::FixedSizeBinary(_)
18            | DataType::LargeBinary
19            | DataType::Utf8
20            | DataType::LargeUtf8 => {
21                // TODO(ngates): we should support converting VarBinView into these Arrow arrays.
22            }
23            DataType::BinaryView | DataType::Utf8View => {
24                // These are both supported with a zero-copy cast, see below
25            }
26            _ => {
27                // Everything else is unsupported
28                vortex_bail!("Unsupported data type: {data_type}")
29            }
30        }
31
32        let arrow_arr = varbinview_as_arrow(array);
33        Ok(Some(if arrow_arr.data_type() != data_type {
34            cast(arrow_arr.as_ref(), data_type)?
35        } else {
36            arrow_arr
37        }))
38    }
39}