Skip to content

Commit 2880b5f

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

33 files changed

Lines changed: 237 additions & 369 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: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ use crate::array::ArraySlots;
3636
use crate::array::DynArrayData;
3737
use crate::arrays::Bool;
3838
use crate::arrays::Constant;
39+
use crate::arrays::Decimal;
3940
use crate::arrays::DictArray;
4041
use crate::arrays::FilterArray;
4142
use crate::arrays::Null;
@@ -448,6 +449,7 @@ impl ArrayRef {
448449
self.is::<Null>()
449450
|| self.is::<Bool>()
450451
|| self.is::<Primitive>()
452+
|| self.is::<Decimal>()
451453
|| self.is::<VarBin>()
452454
|| self.is::<VarBinView>()
453455
}
@@ -801,3 +803,30 @@ impl<V: VTable> Matcher for V {
801803
Some(unsafe { ArrayView::new_unchecked(array, &inner.data) })
802804
}
803805
}
806+
807+
#[cfg(test)]
808+
mod tests {
809+
use vortex_buffer::buffer;
810+
811+
use super::*;
812+
use crate::arrays::DecimalArray;
813+
use crate::dtype::DecimalDType;
814+
815+
#[test]
816+
fn fixed_width_arrays_match_their_logical_vtable() {
817+
let primitive = buffer![1i32].into_array();
818+
let decimal = DecimalArray::new(
819+
buffer![1i32],
820+
DecimalDType::new(1, 0),
821+
Validity::NonNullable,
822+
)
823+
.into_array();
824+
825+
assert!(primitive.is::<Primitive>());
826+
assert!(!primitive.is::<Decimal>());
827+
assert!(decimal.is::<Decimal>());
828+
assert!(!decimal.is::<Primitive>());
829+
assert!(primitive.is_arrow());
830+
assert!(decimal.is_arrow());
831+
}
832+
}

0 commit comments

Comments
 (0)