Skip to content

Commit f124538

Browse files
committed
Reuse fixed-width storage for decimal arrays
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
1 parent 68bd7c9 commit f124538

33 files changed

Lines changed: 235 additions & 383 deletions

File tree

fuzz/src/array/fill_null.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use vortex_array::arrays::DecimalArray;
1313
use vortex_array::arrays::PrimitiveArray;
1414
use vortex_array::arrays::VarBinViewArray;
1515
use vortex_array::arrays::bool::BoolArrayExt;
16+
use vortex_array::arrays::decimal::DecimalArrayExt;
1617
use vortex_array::builtins::ArrayBuiltins;
1718
use vortex_array::dtype::DType;
1819
use vortex_array::dtype::Nullability;

fuzz/src/array/mask.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use vortex_array::arrays::PrimitiveArray;
1616
use vortex_array::arrays::StructArray;
1717
use vortex_array::arrays::VarBinViewArray;
1818
use vortex_array::arrays::bool::BoolArrayExt;
19+
use vortex_array::arrays::decimal::DecimalArrayExt;
1920
use vortex_array::arrays::extension::ExtensionArrayExt;
2021
use vortex_array::arrays::fixed_size_list::FixedSizeListArrayExt;
2122
use vortex_array::arrays::listview::ListViewArrayExt;

fuzz/src/array/scalar_at.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use vortex_array::Canonical;
77
use vortex_array::ExecutionCtx;
88
use vortex_array::IntoArray;
99
use vortex_array::arrays::bool::BoolArrayExt;
10+
use vortex_array::arrays::decimal::DecimalArrayExt;
1011
use vortex_array::arrays::extension::ExtensionArrayExt;
1112
use vortex_array::arrays::fixed_size_list::FixedSizeListArrayExt;
1213
use vortex_array::arrays::listview::ListViewArrayExt;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use super::MinMaxPartial;
99
use super::MinMaxResult;
1010
use crate::ExecutionCtx;
1111
use crate::arrays::DecimalArray;
12+
use crate::arrays::decimal::DecimalArrayExt;
1213
use crate::dtype::DecimalDType;
1314
use crate::dtype::NativeDecimalType;
1415
use crate::dtype::Nullability::NonNullable;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,9 +300,9 @@ impl AggregateFnVTable for Sum {
300300

301301
let result = match batch {
302302
Columnar::Canonical(c) => match c {
303-
Canonical::Primitive(p) => accumulate_primitive(&mut inner, p, ctx, skip_nans),
303+
Canonical::Primitive(a) => accumulate_primitive(&mut inner, a, ctx, skip_nans),
304+
Canonical::Decimal(a) => accumulate_decimal(&mut inner, a, ctx),
304305
Canonical::Bool(b) => accumulate_bool(&mut inner, b, ctx),
305-
Canonical::Decimal(d) => accumulate_decimal(&mut inner, d, ctx),
306306
_ => vortex_bail!("Unsupported canonical type for sum: {}", batch.dtype()),
307307
},
308308
Columnar::Constant(_) => unreachable!(),

vortex-array/src/array/erased.rs

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,10 @@ use crate::array::ArrayId;
3434
use crate::array::ArrayInner;
3535
use crate::array::ArraySlots;
3636
use crate::array::DynArrayData;
37-
use crate::arrays::Bool;
3837
use crate::arrays::Constant;
3938
use crate::arrays::DictArray;
4039
use crate::arrays::FilterArray;
41-
use crate::arrays::Null;
42-
use crate::arrays::Primitive;
4340
use crate::arrays::SliceArray;
44-
use crate::arrays::VarBin;
45-
use crate::arrays::VarBinView;
4641
use crate::buffer::BufferHandle;
4742
use crate::builders::ArrayBuilder;
4843
use crate::dtype::DType;
@@ -443,15 +438,6 @@ impl ArrayRef {
443438
nbytes
444439
}
445440

446-
/// Returns whether this array is an arrow encoding.
447-
pub fn is_arrow(&self) -> bool {
448-
self.is::<Null>()
449-
|| self.is::<Bool>()
450-
|| self.is::<Primitive>()
451-
|| self.is::<VarBin>()
452-
|| self.is::<VarBinView>()
453-
}
454-
455441
/// Whether the array is of a canonical encoding.
456442
pub fn is_canonical(&self) -> bool {
457443
self.is::<AnyCanonical>()
@@ -801,3 +787,30 @@ impl<V: VTable> Matcher for V {
801787
Some(unsafe { ArrayView::new_unchecked(array, &inner.data) })
802788
}
803789
}
790+
791+
#[cfg(test)]
792+
mod tests {
793+
use vortex_buffer::buffer;
794+
795+
use super::*;
796+
use crate::arrays::Decimal;
797+
use crate::arrays::DecimalArray;
798+
use crate::arrays::Primitive;
799+
use crate::dtype::DecimalDType;
800+
801+
#[test]
802+
fn fixed_width_arrays_match_their_logical_vtable() {
803+
let primitive = buffer![1i32].into_array();
804+
let decimal = DecimalArray::new(
805+
buffer![1i32],
806+
DecimalDType::new(1, 0),
807+
Validity::NonNullable,
808+
)
809+
.into_array();
810+
811+
assert!(primitive.is::<Primitive>());
812+
assert!(!primitive.is::<Decimal>());
813+
assert!(decimal.is::<Decimal>());
814+
assert!(!decimal.is::<Primitive>());
815+
}
816+
}

0 commit comments

Comments
 (0)