Skip to content

Commit 15dd4d3

Browse files
author
Matthew Katz
committed
maybe rebuild at arrow boundary
Signed-off-by: Matthew Katz <katz@spiraldb.com>
1 parent 94cf0b5 commit 15dd4d3

1 file changed

Lines changed: 9 additions & 8 deletions

File tree

vortex-array/src/arrow/executor/list_view.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ use vortex_error::vortex_ensure;
1111

1212
use crate::ArrayRef;
1313
use crate::ExecutionCtx;
14-
use crate::arrays::ListView;
1514
use crate::arrays::ListViewArray;
1615
use crate::arrays::PrimitiveArray;
1716
use crate::arrays::listview::ListViewDataParts;
17+
use crate::arrays::listview::ListViewRebuildMode;
1818
use crate::arrow::executor::validity::to_arrow_null_buffer;
1919
use crate::arrow::session::ArrowSessionExt;
2020
use crate::builtins::ArrayBuiltins;
@@ -27,15 +27,16 @@ pub(super) fn to_arrow_list_view<O: OffsetSizeTrait + IntegerPType>(
2727
elements_field: &FieldRef,
2828
ctx: &mut ExecutionCtx,
2929
) -> VortexResult<arrow_array::ArrayRef> {
30-
// Check for Vortex ListViewArray and convert directly.
31-
let array = match array.try_downcast::<ListView>() {
32-
Ok(array) => return list_view_to_list_view::<O>(array, elements_field, ctx),
33-
Err(array) => array,
30+
let array = array.execute::<ListViewArray>(ctx)?;
31+
32+
// If array is sparse, rebuild before handing it to Arrow
33+
let array = if array.should_rebuild(false, ctx)? {
34+
array.rebuild(ListViewRebuildMode::MakeZeroCopyToList)?
35+
} else {
36+
array
3437
};
3538

36-
// Otherwise, we execute to ListViewArray and convert.
37-
let list_view_array = array.execute::<ListViewArray>(ctx)?;
38-
list_view_to_list_view::<O>(list_view_array, elements_field, ctx)
39+
list_view_to_list_view::<O>(array, elements_field, ctx)
3940
}
4041

4142
fn list_view_to_list_view<O: OffsetSizeTrait + IntegerPType>(

0 commit comments

Comments
 (0)