Skip to content

Commit 3feabed

Browse files
committed
Add UnionArray
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
1 parent b7ee873 commit 3feabed

23 files changed

Lines changed: 816 additions & 8 deletions

File tree

fuzz/src/array/fill_null.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ pub fn fill_null_canonical_array(
4949
| Canonical::List(_)
5050
| Canonical::FixedSizeList(_)
5151
| Canonical::Extension(_) => canonical.into_array().fill_null(fill_value.clone())?,
52+
Canonical::Union(_) => unreachable!("Union arrays are not fuzzed yet"),
5253
Canonical::Variant(_) => unreachable!("Variant arrays are not fuzzed"),
5354
})
5455
}

fuzz/src/array/mask.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ pub fn mask_canonical_array(
149149
.with_nullability(masked_storage.dtype().nullability());
150150
ExtensionArray::new(ext_dtype, masked_storage).into_array()
151151
}
152+
Canonical::Union(_) => unreachable!("Union arrays are not fuzzed yet"),
152153
Canonical::Variant(_) => unreachable!("Variant arrays are not fuzzed"),
153154
})
154155
}

fuzz/src/array/scalar_at.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ pub fn scalar_at_canonical_array(
104104
let storage_scalar = scalar_at_canonical_array(storage_canonical, index, ctx)?;
105105
Scalar::extension_ref(array.ext_dtype().clone(), storage_scalar)
106106
}
107+
Canonical::Union(_) => unreachable!("Union arrays are not fuzzed yet"),
107108
Canonical::Variant(_) => unreachable!("Variant arrays are not fuzzed"),
108109
})
109110
}

vortex-array/src/aggregate_fn/fns/is_constant/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,9 @@ impl AggregateFnVTable for IsConstant {
404404
Canonical::List(l) => check_listview_constant(l, ctx)?,
405405
Canonical::FixedSizeList(f) => check_fixed_size_list_constant(f, ctx)?,
406406
Canonical::Null(_) => true,
407+
Canonical::Union(_) => {
408+
vortex_bail!("Union arrays don't support IsConstant yet")
409+
}
407410
Canonical::Variant(_) => {
408411
vortex_bail!("Variant arrays don't support IsConstant")
409412
}

vortex-array/src/aggregate_fn/fns/min_max/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ impl AggregateFnVTable for MinMax {
420420
Canonical::Struct(_)
421421
| Canonical::List(_)
422422
| Canonical::FixedSizeList(_)
423+
| Canonical::Union(_)
423424
| Canonical::Variant(_) => {
424425
vortex_bail!("Unsupported canonical type for min_max: {}", batch.dtype())
425426
}

vortex-array/src/aggregate_fn/fns/uncompressed_size_in_bytes/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,9 @@ pub(crate) fn canonical_uncompressed_size_in_bytes(
199199
Canonical::List(array) => list_view_uncompressed_size_in_bytes(array, ctx),
200200
Canonical::FixedSizeList(array) => fixed_size_list_uncompressed_size_in_bytes(array, ctx),
201201
Canonical::Struct(array) => struct_uncompressed_size_in_bytes(array, ctx),
202+
Canonical::Union(_) => {
203+
vortex_bail!("UncompressedSizeInBytes is not supported for Union arrays yet")
204+
}
202205
Canonical::Extension(array) => extension_uncompressed_size_in_bytes(array, ctx),
203206
Canonical::Variant(_) => {
204207
vortex_bail!("UncompressedSizeInBytes is not supported for Variant arrays")

vortex-array/src/arrays/dict/execute.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
66
use vortex_error::VortexExpect;
77
use vortex_error::VortexResult;
8+
use vortex_error::vortex_bail;
89

910
use crate::Canonical;
1011
use crate::CanonicalView;
@@ -53,6 +54,9 @@ pub(crate) fn take_canonical(
5354
Canonical::FixedSizeList(take_fixed_size_list(&a, codes, ctx))
5455
}
5556
Canonical::Struct(a) => Canonical::Struct(take_struct(&a, codes)),
57+
Canonical::Union(_) => {
58+
vortex_bail!("Dictionary execution is not supported for UnionArray yet")
59+
}
5660
Canonical::Extension(a) => Canonical::Extension(take_extension(&a, codes, ctx)),
5761
Canonical::Variant(a) => {
5862
let indices = codes.clone().into_array();

vortex-array/src/arrays/filter/execute/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ pub(super) fn execute_filter(canonical: Canonical, mask: &Arc<MaskValues>) -> Ca
9595
Canonical::FixedSizeList(fixed_size_list::filter_fixed_size_list(&a, mask))
9696
}
9797
Canonical::Struct(a) => Canonical::Struct(struct_::filter_struct(&a, mask)),
98+
Canonical::Union(_) => todo!("UnionArray filter is not supported yet"),
9899
Canonical::Extension(a) => {
99100
let filtered_storage = a
100101
.storage_array()

vortex-array/src/arrays/masked/execute.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use std::sync::Arc;
77

88
use vortex_error::VortexResult;
9+
use vortex_error::vortex_bail;
910

1011
use crate::Canonical;
1112
use crate::IntoArray;
@@ -50,6 +51,7 @@ pub fn mask_validity_canonical(
5051
Canonical::FixedSizeList(mask_validity_fixed_size_list(a, validity)?)
5152
}
5253
Canonical::Struct(a) => Canonical::Struct(mask_validity_struct(a, validity)?),
54+
Canonical::Union(_) => vortex_bail!("Masking UnionArray is not supported yet"),
5355
Canonical::Extension(a) => Canonical::Extension(mask_validity_extension(a, validity, ctx)?),
5456
Canonical::Variant(a) => Canonical::Variant(mask_validity_variant(a, validity, ctx)?),
5557
})

vortex-array/src/arrays/mod.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
//!
66
//! Canonical arrays are the default uncompressed representation for a logical dtype:
77
//! [`NullArray`], [`BoolArray`], [`PrimitiveArray`], [`DecimalArray`], [`VarBinViewArray`],
8-
//! [`ListViewArray`], [`FixedSizeListArray`], [`StructArray`], [`ExtensionArray`], and
9-
//! [`VariantArray`].
8+
//! [`ListViewArray`], [`FixedSizeListArray`], [`StructArray`], [`UnionArray`],
9+
//! [`ExtensionArray`], and [`VariantArray`].
1010
//!
1111
//! Utility and lazy arrays represent common transformations without immediately materializing
1212
//! their result. Examples include [`ChunkedArray`] for concatenation, [`ConstantArray`] for repeated
@@ -112,6 +112,10 @@ pub mod struct_;
112112
pub use struct_::Struct;
113113
pub use struct_::StructArray;
114114

115+
pub mod union;
116+
pub use union::Union;
117+
pub use union::UnionArray;
118+
115119
pub mod varbin;
116120
pub use varbin::VarBin;
117121
pub use varbin::VarBinArray;

0 commit comments

Comments
 (0)