Skip to content

Commit 015b5d7

Browse files
committed
why not
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
1 parent 6137d02 commit 015b5d7

20 files changed

Lines changed: 272 additions & 0 deletions

File tree

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33

44
use crate::ArrayBufferVisitor;
55
use crate::ArrayChildVisitor;
6+
use crate::ArrayRef;
67
use crate::arrays::BoolArray;
78
use crate::arrays::BoolVTable;
89
use crate::vtable::VisitorVTable;
10+
use crate::vtable::validity_nchildren;
11+
use crate::vtable::validity_to_child;
912

1013
impl VisitorVTable<BoolVTable> for BoolVTable {
1114
fn visit_buffers(array: &BoolArray, visitor: &mut dyn ArrayBufferVisitor) {
@@ -15,4 +18,15 @@ impl VisitorVTable<BoolVTable> for BoolVTable {
1518
fn visit_children(array: &BoolArray, visitor: &mut dyn ArrayChildVisitor) {
1619
visitor.visit_validity(&array.validity, array.len());
1720
}
21+
22+
fn nchildren(array: &BoolArray) -> usize {
23+
validity_nchildren(&array.validity)
24+
}
25+
26+
fn nth_child(array: &BoolArray, idx: usize) -> Option<ArrayRef> {
27+
match idx {
28+
0 => validity_to_child(&array.validity, array.len()),
29+
_ => None,
30+
}
31+
}
1832
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,15 @@ impl VisitorVTable<ChunkedVTable> for ChunkedVTable {
2626
visitor.visit_child(chunk);
2727
}
2828
}
29+
30+
fn nchildren(array: &ChunkedArray) -> usize {
31+
1 + array.chunks().len()
32+
}
33+
34+
fn nth_child(array: &ChunkedArray, idx: usize) -> Option<crate::ArrayRef> {
35+
match idx {
36+
0 => Some(array.chunk_offsets.to_array()),
37+
n => array.chunks().get(n - 1).cloned(),
38+
}
39+
}
2940
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use vortex_buffer::ByteBufferMut;
55

66
use crate::ArrayBufferVisitor;
77
use crate::ArrayChildVisitor;
8+
use crate::ArrayRef;
89
use crate::arrays::ConstantArray;
910
use crate::arrays::ConstantVTable;
1011
use crate::buffer::BufferHandle;
@@ -21,4 +22,12 @@ impl VisitorVTable<ConstantVTable> for ConstantVTable {
2122
}
2223

2324
fn visit_children(_array: &ConstantArray, _visitor: &mut dyn ArrayChildVisitor) {}
25+
26+
fn nchildren(_array: &ConstantArray) -> usize {
27+
0
28+
}
29+
30+
fn nth_child(_array: &ConstantArray, _idx: usize) -> Option<ArrayRef> {
31+
None
32+
}
2433
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33

44
use crate::ArrayBufferVisitor;
55
use crate::ArrayChildVisitor;
6+
use crate::ArrayRef;
67
use crate::arrays::DecimalArray;
78
use crate::arrays::DecimalVTable;
89
use crate::vtable::ValidityHelper;
910
use crate::vtable::VisitorVTable;
11+
use crate::vtable::validity_nchildren;
12+
use crate::vtable::validity_to_child;
1013

1114
impl VisitorVTable<DecimalVTable> for DecimalVTable {
1215
fn visit_buffers(array: &DecimalArray, visitor: &mut dyn ArrayBufferVisitor) {
@@ -16,4 +19,15 @@ impl VisitorVTable<DecimalVTable> for DecimalVTable {
1619
fn visit_children(array: &DecimalArray, visitor: &mut dyn ArrayChildVisitor) {
1720
visitor.visit_validity(array.validity(), array.len())
1821
}
22+
23+
fn nchildren(array: &DecimalArray) -> usize {
24+
validity_nchildren(array.validity())
25+
}
26+
27+
fn nth_child(array: &DecimalArray, idx: usize) -> Option<ArrayRef> {
28+
match idx {
29+
0 => validity_to_child(array.validity(), array.len()),
30+
_ => None,
31+
}
32+
}
1933
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use super::DictVTable;
55
use crate::ArrayBufferVisitor;
66
use crate::ArrayChildVisitor;
7+
use crate::ArrayRef;
78
use crate::arrays::dict::DictArray;
89
use crate::vtable::VisitorVTable;
910

@@ -14,4 +15,16 @@ impl VisitorVTable<DictVTable> for DictVTable {
1415
visitor.visit_child("codes", array.codes());
1516
visitor.visit_child("values", array.values());
1617
}
18+
19+
fn nchildren(_array: &DictArray) -> usize {
20+
2
21+
}
22+
23+
fn nth_child(array: &DictArray, idx: usize) -> Option<ArrayRef> {
24+
match idx {
25+
0 => Some(array.codes().clone()),
26+
1 => Some(array.values().clone()),
27+
_ => None,
28+
}
29+
}
1730
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
use crate::ArrayBufferVisitor;
55
use crate::ArrayChildVisitor;
6+
use crate::ArrayRef;
67
use crate::arrays::extension::ExtensionArray;
78
use crate::arrays::extension::ExtensionVTable;
89
use crate::vtable::VisitorVTable;
@@ -13,4 +14,15 @@ impl VisitorVTable<ExtensionVTable> for ExtensionVTable {
1314
fn visit_children(array: &ExtensionArray, visitor: &mut dyn ArrayChildVisitor) {
1415
visitor.visit_child("storage", &array.storage);
1516
}
17+
18+
fn nchildren(_array: &ExtensionArray) -> usize {
19+
1
20+
}
21+
22+
fn nth_child(array: &ExtensionArray, idx: usize) -> Option<ArrayRef> {
23+
match idx {
24+
0 => Some(array.storage.clone()),
25+
_ => None,
26+
}
27+
}
1628
}

vortex-array/src/arrays/filter/vtable.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,17 @@ impl VisitorVTable<FilterVTable> for FilterVTable {
176176
fn visit_children(array: &FilterArray, visitor: &mut dyn ArrayChildVisitor) {
177177
visitor.visit_child("child", &array.child);
178178
}
179+
180+
fn nchildren(_array: &FilterArray) -> usize {
181+
1
182+
}
183+
184+
fn nth_child(array: &FilterArray, idx: usize) -> Option<ArrayRef> {
185+
match idx {
186+
0 => Some(array.child.clone()),
187+
_ => None,
188+
}
189+
}
179190
}
180191

181192
pub struct FilterMetadata(pub(super) Mask);

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33

44
use crate::ArrayBufferVisitor;
55
use crate::ArrayChildVisitor;
6+
use crate::ArrayRef;
67
use crate::arrays::FixedSizeListArray;
78
use crate::arrays::FixedSizeListVTable;
89
use crate::vtable::ValidityHelper;
910
use crate::vtable::VisitorVTable;
11+
use crate::vtable::validity_nchildren;
12+
use crate::vtable::validity_to_child;
1013

1114
impl VisitorVTable<FixedSizeListVTable> for FixedSizeListVTable {
1215
fn visit_buffers(_array: &FixedSizeListArray, _visitor: &mut dyn ArrayBufferVisitor) {
@@ -18,4 +21,16 @@ impl VisitorVTable<FixedSizeListVTable> for FixedSizeListVTable {
1821
visitor.visit_child("elements", array.elements());
1922
visitor.visit_validity(array.validity(), array.len());
2023
}
24+
25+
fn nchildren(array: &FixedSizeListArray) -> usize {
26+
1 + validity_nchildren(array.validity())
27+
}
28+
29+
fn nth_child(array: &FixedSizeListArray, idx: usize) -> Option<ArrayRef> {
30+
match idx {
31+
0 => Some(array.elements().clone()),
32+
1 => validity_to_child(array.validity(), array.len()),
33+
_ => None,
34+
}
35+
}
2136
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33

44
use crate::ArrayBufferVisitor;
55
use crate::ArrayChildVisitor;
6+
use crate::ArrayRef;
67
use crate::arrays::ListArray;
78
use crate::arrays::ListVTable;
89
use crate::vtable::ValidityHelper;
910
use crate::vtable::VisitorVTable;
11+
use crate::vtable::validity_nchildren;
12+
use crate::vtable::validity_to_child;
1013

1114
impl VisitorVTable<ListVTable> for ListVTable {
1215
fn visit_buffers(_array: &ListArray, _visitor: &mut dyn ArrayBufferVisitor) {}
@@ -16,4 +19,17 @@ impl VisitorVTable<ListVTable> for ListVTable {
1619
visitor.visit_child("offsets", array.offsets());
1720
visitor.visit_validity(array.validity(), array.len());
1821
}
22+
23+
fn nchildren(array: &ListArray) -> usize {
24+
2 + validity_nchildren(array.validity())
25+
}
26+
27+
fn nth_child(array: &ListArray, idx: usize) -> Option<ArrayRef> {
28+
match idx {
29+
0 => Some(array.elements().clone()),
30+
1 => Some(array.offsets().clone()),
31+
2 => validity_to_child(array.validity(), array.len()),
32+
_ => None,
33+
}
34+
}
1935
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33

44
use crate::ArrayBufferVisitor;
55
use crate::ArrayChildVisitor;
6+
use crate::ArrayRef;
67
use crate::arrays::ListViewArray;
78
use crate::arrays::ListViewVTable;
89
use crate::vtable::ValidityHelper;
910
use crate::vtable::VisitorVTable;
11+
use crate::vtable::validity_nchildren;
12+
use crate::vtable::validity_to_child;
1013

1114
impl VisitorVTable<ListViewVTable> for ListViewVTable {
1215
fn visit_buffers(_array: &ListViewArray, _visitor: &mut dyn ArrayBufferVisitor) {
@@ -19,4 +22,18 @@ impl VisitorVTable<ListViewVTable> for ListViewVTable {
1922
visitor.visit_child("sizes", array.sizes());
2023
visitor.visit_validity(array.validity(), array.len());
2124
}
25+
26+
fn nchildren(array: &ListViewArray) -> usize {
27+
3 + validity_nchildren(array.validity())
28+
}
29+
30+
fn nth_child(array: &ListViewArray, idx: usize) -> Option<ArrayRef> {
31+
match idx {
32+
0 => Some(array.elements().clone()),
33+
1 => Some(array.offsets().clone()),
34+
2 => Some(array.sizes().clone()),
35+
3 => validity_to_child(array.validity(), array.len()),
36+
_ => None,
37+
}
38+
}
2239
}

0 commit comments

Comments
 (0)