Skip to content

Commit d334647

Browse files
chore[visitor]: add a visit buffer handle with name (#6191)
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
1 parent 60530b1 commit d334647

20 files changed

Lines changed: 160 additions & 45 deletions

File tree

encodings/bytebool/src/array.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use vortex_array::vtable::VisitorVTable;
3333
use vortex_buffer::BitBuffer;
3434
use vortex_buffer::ByteBuffer;
3535
use vortex_dtype::DType;
36-
use vortex_error::VortexExpect;
36+
use vortex_error::VortexExpect as _;
3737
use vortex_error::VortexResult;
3838
use vortex_error::vortex_bail;
3939
use vortex_error::vortex_ensure;
@@ -226,7 +226,7 @@ impl OperationsVTable<ByteBoolVTable> for ByteBoolVTable {
226226

227227
impl VisitorVTable<ByteBoolVTable> for ByteBoolVTable {
228228
fn visit_buffers(array: &ByteBoolArray, visitor: &mut dyn ArrayBufferVisitor) {
229-
visitor.visit_buffer(array.buffer().as_host());
229+
visitor.visit_buffer_handle("values", array.buffer());
230230
}
231231

232232
fn visit_children(array: &ByteBoolArray, visitor: &mut dyn ArrayChildVisitor) {

encodings/fastlanes/src/bitpacking/vtable/visitor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::BitPackedVTable;
1111

1212
impl VisitorVTable<BitPackedVTable> for BitPackedVTable {
1313
fn visit_buffers(array: &BitPackedArray, visitor: &mut dyn ArrayBufferVisitor) {
14-
visitor.visit_buffer(array.packed().as_host());
14+
visitor.visit_buffer_handle("packed", array.packed());
1515
}
1616

1717
fn visit_children(array: &BitPackedArray, visitor: &mut dyn ArrayChildVisitor) {

encodings/fsst/src/array.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,8 +427,14 @@ impl ValidityChild<FSSTVTable> for FSSTVTable {
427427

428428
impl VisitorVTable<FSSTVTable> for FSSTVTable {
429429
fn visit_buffers(array: &FSSTArray, visitor: &mut dyn ArrayBufferVisitor) {
430-
visitor.visit_buffer(&array.symbols().clone().into_byte_buffer());
431-
visitor.visit_buffer(&array.symbol_lengths().clone().into_byte_buffer());
430+
visitor.visit_buffer_handle(
431+
"symbols",
432+
&BufferHandle::new_host(array.symbols().clone().into_byte_buffer()),
433+
);
434+
visitor.visit_buffer_handle(
435+
"symbol_lengths",
436+
&BufferHandle::new_host(array.symbol_lengths().clone().into_byte_buffer()),
437+
);
432438
}
433439

434440
fn visit_children(array: &FSSTArray, visitor: &mut dyn ArrayChildVisitor) {

encodings/pco/src/array.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ use vortex_dtype::DType;
5252
use vortex_dtype::PType;
5353
use vortex_dtype::half;
5454
use vortex_error::VortexError;
55-
use vortex_error::VortexExpect;
55+
use vortex_error::VortexExpect as _;
5656
use vortex_error::VortexResult;
5757
use vortex_error::vortex_bail;
5858
use vortex_error::vortex_ensure;
@@ -533,11 +533,17 @@ impl OperationsVTable<PcoVTable> for PcoVTable {
533533

534534
impl VisitorVTable<PcoVTable> for PcoVTable {
535535
fn visit_buffers(array: &PcoArray, visitor: &mut dyn ArrayBufferVisitor) {
536-
for buffer in &array.chunk_metas {
537-
visitor.visit_buffer(buffer);
536+
for (i, buffer) in array.chunk_metas.iter().enumerate() {
537+
visitor.visit_buffer_handle(
538+
&format!("chunk_meta_{i}"),
539+
&BufferHandle::new_host(buffer.clone()),
540+
);
538541
}
539-
for buffer in &array.pages {
540-
visitor.visit_buffer(buffer);
542+
for (i, buffer) in array.pages.iter().enumerate() {
543+
visitor.visit_buffer_handle(
544+
&format!("page_{i}"),
545+
&BufferHandle::new_host(buffer.clone()),
546+
);
541547
}
542548
}
543549

encodings/sparse/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ impl VisitorVTable<SparseVTable> for SparseVTable {
489489
.value()
490490
.to_protobytes::<ByteBufferMut>()
491491
.freeze();
492-
visitor.visit_buffer(&fill_value_buffer);
492+
visitor.visit_buffer_handle("fill_value", &BufferHandle::new_host(fill_value_buffer));
493493
}
494494

495495
fn visit_children(array: &SparseArray, visitor: &mut dyn ArrayChildVisitor) {

encodings/zstd/src/array.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -897,10 +897,13 @@ impl OperationsVTable<ZstdVTable> for ZstdVTable {
897897
impl VisitorVTable<ZstdVTable> for ZstdVTable {
898898
fn visit_buffers(array: &ZstdArray, visitor: &mut dyn ArrayBufferVisitor) {
899899
if let Some(buffer) = &array.dictionary {
900-
visitor.visit_buffer(buffer);
900+
visitor.visit_buffer_handle("dictionary", &BufferHandle::new_host(buffer.clone()));
901901
}
902-
for buffer in &array.frames {
903-
visitor.visit_buffer(buffer);
902+
for (i, buffer) in array.frames.iter().enumerate() {
903+
visitor.visit_buffer_handle(
904+
&format!("frame_{i}"),
905+
&BufferHandle::new_host(buffer.clone()),
906+
);
904907
}
905908
}
906909

vortex-array/src/array/mod.rs

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ use crate::arrays::SliceArray;
4646
use crate::arrays::StructVTable;
4747
use crate::arrays::VarBinVTable;
4848
use crate::arrays::VarBinViewVTable;
49+
use crate::buffer::BufferHandle;
4950
use crate::builders::ArrayBuilder;
5051
use crate::compute;
5152
use crate::compute::ComputeFn;
@@ -778,8 +779,8 @@ impl<V: VTable> ArrayVisitor for ArrayAdapter<V> {
778779
}
779780

780781
impl ArrayBufferVisitor for BufferCollector {
781-
fn visit_buffer(&mut self, buffer: &ByteBuffer) {
782-
self.buffers.push(buffer.clone());
782+
fn visit_buffer_handle(&mut self, _name: &str, handle: &BufferHandle) {
783+
self.buffers.push(handle.to_host_sync());
783784
}
784785
}
785786

@@ -790,6 +791,46 @@ impl<V: VTable> ArrayVisitor for ArrayAdapter<V> {
790791
collector.buffers
791792
}
792793

794+
fn buffer_handles(&self) -> Vec<BufferHandle> {
795+
struct BufferHandleCollector {
796+
handles: Vec<BufferHandle>,
797+
}
798+
799+
impl ArrayBufferVisitor for BufferHandleCollector {
800+
fn visit_buffer_handle(&mut self, _name: &str, handle: &BufferHandle) {
801+
self.handles.push(handle.clone());
802+
}
803+
}
804+
805+
let mut collector = BufferHandleCollector {
806+
handles: Vec::new(),
807+
};
808+
<V::VisitorVTable as VisitorVTable<V>>::visit_buffers(&self.0, &mut collector);
809+
collector.handles
810+
}
811+
812+
fn buffer_names(&self) -> Vec<String> {
813+
<V::VisitorVTable as VisitorVTable<V>>::buffer_names(&self.0)
814+
}
815+
816+
fn named_buffers(&self) -> Vec<(String, BufferHandle)> {
817+
struct NamedBufferCollector {
818+
buffers: Vec<(String, BufferHandle)>,
819+
}
820+
821+
impl ArrayBufferVisitor for NamedBufferCollector {
822+
fn visit_buffer_handle(&mut self, name: &str, handle: &BufferHandle) {
823+
self.buffers.push((name.to_string(), handle.clone()));
824+
}
825+
}
826+
827+
let mut collector = NamedBufferCollector {
828+
buffers: Vec::new(),
829+
};
830+
<V::VisitorVTable as VisitorVTable<V>>::visit_buffers(&self.0, &mut collector);
831+
collector.buffers
832+
}
833+
793834
fn nbuffers(&self) -> usize {
794835
<V::VisitorVTable as VisitorVTable<V>>::nbuffers(&self.0)
795836
}

vortex-array/src/array/visitor.rs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ pub trait ArrayVisitor {
3131
/// Returns the buffers of the array.
3232
fn buffers(&self) -> Vec<ByteBuffer>;
3333

34+
/// Returns the buffer handles of the array.
35+
fn buffer_handles(&self) -> Vec<BufferHandle>;
36+
37+
/// Returns the names of the buffers of the array.
38+
fn buffer_names(&self) -> Vec<String>;
39+
40+
/// Returns the array's buffers with their names.
41+
fn named_buffers(&self) -> Vec<(String, BufferHandle)>;
42+
3443
/// Returns the number of buffers of the array.
3544
fn nbuffers(&self) -> usize;
3645

@@ -63,6 +72,18 @@ impl ArrayVisitor for Arc<dyn Array> {
6372
self.as_ref().buffers()
6473
}
6574

75+
fn buffer_handles(&self) -> Vec<BufferHandle> {
76+
self.as_ref().buffer_handles()
77+
}
78+
79+
fn buffer_names(&self) -> Vec<String> {
80+
self.as_ref().buffer_names()
81+
}
82+
83+
fn named_buffers(&self) -> Vec<(String, BufferHandle)> {
84+
self.as_ref().named_buffers()
85+
}
86+
6687
fn nbuffers(&self) -> usize {
6788
self.as_ref().nbuffers()
6889
}
@@ -114,11 +135,7 @@ pub trait ArrayVisitorExt: Array {
114135
impl<A: Array + ?Sized> ArrayVisitorExt for A {}
115136

116137
pub trait ArrayBufferVisitor {
117-
fn visit_buffer_handle(&mut self, handle: &BufferHandle) -> VortexResult<()> {
118-
self.visit_buffer(&handle.clone().try_to_host_sync()?);
119-
Ok(())
120-
}
121-
fn visit_buffer(&mut self, buffer: &ByteBuffer);
138+
fn visit_buffer_handle(&mut self, _name: &str, handle: &BufferHandle);
122139
}
123140

124141
pub trait ArrayChildVisitor {

vortex-array/src/arrays/bool/vtable/visitor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::vtable::VisitorVTable;
99

1010
impl VisitorVTable<BoolVTable> for BoolVTable {
1111
fn visit_buffers(array: &BoolArray, visitor: &mut dyn ArrayBufferVisitor) {
12-
visitor.visit_buffer(array.bits.as_host())
12+
visitor.visit_buffer_handle("bits", &array.bits);
1313
}
1414

1515
fn visit_children(array: &BoolArray, visitor: &mut dyn ArrayChildVisitor) {

vortex-array/src/arrays/constant/vtable/visitor.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use crate::ArrayBufferVisitor;
77
use crate::ArrayChildVisitor;
88
use crate::arrays::ConstantArray;
99
use crate::arrays::ConstantVTable;
10+
use crate::buffer::BufferHandle;
1011
use crate::vtable::VisitorVTable;
1112

1213
impl VisitorVTable<ConstantVTable> for ConstantVTable {
@@ -16,7 +17,7 @@ impl VisitorVTable<ConstantVTable> for ConstantVTable {
1617
.value()
1718
.to_protobytes::<ByteBufferMut>()
1819
.freeze();
19-
visitor.visit_buffer(&buffer);
20+
visitor.visit_buffer_handle("scalar", &BufferHandle::new_host(buffer));
2021
}
2122

2223
fn visit_children(_array: &ConstantArray, _visitor: &mut dyn ArrayChildVisitor) {}

0 commit comments

Comments
 (0)