Skip to content

Commit 4454bc6

Browse files
committed
vroom vroom
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
1 parent 7d83fd1 commit 4454bc6

File tree

7 files changed

+54
-49
lines changed

7 files changed

+54
-49
lines changed

encodings/fastlanes/src/bitpacking/array/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,7 @@ mod test {
518518
use vortex_array::ToCanonical;
519519
use vortex_array::arrays::PrimitiveArray;
520520
use vortex_array::assert_arrays_eq;
521+
use vortex_array::validity::Validity;
521522
use vortex_buffer::Buffer;
522523

523524
use crate::BitPackedData;
@@ -562,7 +563,7 @@ mod test {
562563
);
563564
assert_arrays_eq!(
564565
packed_with_patches.as_array().to_primitive(),
565-
PrimitiveArray::new(values, vortex_array::validity::Validity::NonNullable)
566+
PrimitiveArray::new(values, Validity::NonNullable)
566567
);
567568
}
568569
}

encodings/fastlanes/src/bitpacking/compute/compare.rs

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -110,16 +110,20 @@ where
110110
T: NativePType + FastLanesComparable<Bitpacked = U>,
111111
U: UnsignedPType + BitPacking + BitPackingCompare,
112112
{
113-
let mut bits =
114-
collect_chunk_masks::<U>(array.data(), array.len(), array.offset(), |bit_width, packed_chunk, chunk_matches| unsafe {
113+
let mut bits = collect_chunk_masks::<U>(
114+
array.data(),
115+
array.len(),
116+
array.offset(),
117+
|bit_width, packed_chunk, chunk_matches| unsafe {
115118
U::unchecked_unpack_cmp(
116119
bit_width,
117120
packed_chunk,
118121
chunk_matches,
119122
|lhs, rhs| compare_values(lhs, rhs, operator),
120123
value,
121124
);
122-
});
125+
},
126+
);
123127

124128
if let Some(patches) = array.patches() {
125129
apply_patch_predicate::<T>(&mut bits, &patches, ctx, |patched| {
@@ -277,9 +281,9 @@ where
277281

278282
for chunk_idx in 0..num_chunks {
279283
let packed_chunk = &packed[chunk_idx * elems_per_chunk..][..elems_per_chunk];
280-
let mut chunk_matches = [0u64; 16];
281-
fill_chunk(bit_width, packed_chunk, &mut chunk_matches);
282-
output.extend_from_slice(&chunk_matches);
284+
append_chunk_matches(&mut output, |chunk_matches| {
285+
fill_chunk(bit_width, packed_chunk, chunk_matches);
286+
});
283287
}
284288

285289
let total_len = num_chunks * 1024;
@@ -316,18 +320,17 @@ where
316320
let num_chunks = (offset as usize + len).div_ceil(1024);
317321
let mut output = BufferMut::<u64>::with_capacity(num_chunks * 16);
318322
let mut unpacked = [U::default(); 1024];
319-
let mut chunk_matches = [0u64; 16];
320323

321324
for chunk_idx in 0..num_chunks {
322325
let packed_chunk = &packed[chunk_idx * elems_per_chunk..][..elems_per_chunk];
323-
chunk_matches.fill(0);
324326

325327
unsafe {
326328
U::unchecked_unpack(bit_width, packed_chunk, &mut unpacked);
327329
}
328330

329-
fill_chunk(&unpacked, &mut chunk_matches);
330-
output.extend_from_slice(&chunk_matches);
331+
append_chunk_matches(&mut output, |chunk_matches| {
332+
fill_chunk(&unpacked, chunk_matches);
333+
});
331334
}
332335

333336
let total_len = num_chunks * 1024;
@@ -345,6 +348,22 @@ where
345348
)
346349
}
347350

351+
#[inline]
352+
fn append_chunk_matches(output: &mut BufferMut<u64>, fill_chunk: impl FnOnce(&mut [u64; 16])) {
353+
let base_len = output.len();
354+
355+
let spare = output.spare_capacity_mut();
356+
debug_assert!(spare.len() >= 16);
357+
let chunk_matches = unsafe { &mut *(spare.as_mut_ptr().cast::<[u64; 16]>()) };
358+
359+
fill_chunk(chunk_matches);
360+
361+
// SAFETY: `fill_chunk` initializes all 16 words before we expose them via `set_len`.
362+
unsafe {
363+
output.set_len(base_len + 16);
364+
}
365+
}
366+
348367
#[inline]
349368
fn fill_between_chunk<U, T, LF, UF>(
350369
unpacked: &[U; 1024],
@@ -448,6 +467,7 @@ mod tests {
448467
use vortex_array::scalar_fn::fns::between::StrictComparison;
449468
use vortex_array::scalar_fn::fns::binary::CompareKernel;
450469
use vortex_array::scalar_fn::fns::operators::CompareOperator;
470+
use vortex_array::validity::Validity;
451471

452472
use crate::BitPacked;
453473
use crate::BitPackedArrayExt;
@@ -514,11 +534,7 @@ mod tests {
514534

515535
assert_arrays_eq!(
516536
result,
517-
BoolArray::from_indices(
518-
array.len(),
519-
[256usize],
520-
vortex_array::validity::Validity::NonNullable,
521-
)
537+
BoolArray::from_indices(array.len(), [256usize], Validity::NonNullable,)
522538
);
523539
}
524540

@@ -584,11 +600,7 @@ mod tests {
584600

585601
assert_arrays_eq!(
586602
result,
587-
BoolArray::from_indices(
588-
len,
589-
[255usize, 256],
590-
vortex_array::validity::Validity::NonNullable,
591-
)
603+
BoolArray::from_indices(len, [255usize, 256], Validity::NonNullable,)
592604
);
593605
}
594606

encodings/fastlanes/src/delta/compute/cast.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ mod tests {
5757
use vortex_array::dtype::Nullability;
5858
use vortex_array::dtype::PType;
5959
use vortex_array::session::ArraySession;
60+
use vortex_array::validity::Validity;
6061
use vortex_buffer::buffer;
6162
use vortex_session::VortexSession;
6263

@@ -88,10 +89,7 @@ mod tests {
8889
fn test_cast_delta_nullable() {
8990
// DeltaArray doesn't support nullable arrays - the validity is handled at the DeltaArray level
9091
// Create a non-nullable array and then add validity to the DeltaArray
91-
let values = PrimitiveArray::new(
92-
buffer![100u16, 0, 200, 300, 0],
93-
vortex_array::validity::Validity::NonNullable,
94-
);
92+
let values = PrimitiveArray::new(buffer![100u16, 0, 200, 300, 0], Validity::NonNullable);
9593
let array =
9694
Delta::try_from_primitive_array(&values, &mut SESSION.create_execution_ctx()).unwrap();
9795

@@ -109,25 +107,25 @@ mod tests {
109107
#[case::u8(
110108
PrimitiveArray::new(
111109
buffer![0u8, 10, 20, 30, 40, 50],
112-
vortex_array::validity::Validity::NonNullable,
110+
Validity::NonNullable,
113111
)
114112
)]
115113
#[case::u16(
116114
PrimitiveArray::new(
117115
buffer![0u16, 100, 200, 300, 400, 500],
118-
vortex_array::validity::Validity::NonNullable,
116+
Validity::NonNullable,
119117
)
120118
)]
121119
#[case::u32(
122120
PrimitiveArray::new(
123121
buffer![0u32, 1000, 2000, 3000, 4000],
124-
vortex_array::validity::Validity::NonNullable,
122+
Validity::NonNullable,
125123
)
126124
)]
127125
#[case::u64(
128126
PrimitiveArray::new(
129127
buffer![0u64, 10000, 20000, 30000],
130-
vortex_array::validity::Validity::NonNullable,
128+
Validity::NonNullable,
131129
)
132130
)]
133131
fn test_cast_delta_conformance(#[case] primitive: PrimitiveArray) {

encodings/sequence/src/compute/compare.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use vortex_array::scalar::PValue;
1414
use vortex_array::scalar::Scalar;
1515
use vortex_array::scalar_fn::fns::binary::CompareKernel;
1616
use vortex_array::scalar_fn::fns::operators::CompareOperator;
17+
use vortex_array::validity::Validity;
1718
use vortex_buffer::BitBuffer;
1819
use vortex_error::VortexExpect;
1920
use vortex_error::VortexResult;
@@ -51,8 +52,8 @@ impl CompareKernel for Sequence {
5152

5253
let nullability = lhs.dtype().nullability() | rhs.dtype().nullability();
5354
let validity = match nullability {
54-
Nullability::NonNullable => vortex_array::validity::Validity::NonNullable,
55-
Nullability::Nullable => vortex_array::validity::Validity::AllValid,
55+
Nullability::NonNullable => Validity::NonNullable,
56+
Nullability::Nullable => Validity::AllValid,
5657
};
5758

5859
if let Ok(set_idx) = set_idx {

encodings/zstd/src/compute/mod.rs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ mod tests {
99
use vortex_array::IntoArray;
1010
use vortex_array::arrays::PrimitiveArray;
1111
use vortex_array::compute::conformance::consistency::test_array_consistency;
12+
use vortex_array::validity;
1213
use vortex_buffer::buffer;
1314

1415
use crate::Zstd;
@@ -36,26 +37,17 @@ mod tests {
3637
}
3738

3839
fn zstd_single() -> ZstdArray {
39-
let values = PrimitiveArray::new(
40-
buffer![42i64],
41-
vortex_array::validity::Validity::NonNullable,
42-
);
40+
let values = PrimitiveArray::new(buffer![42i64], validity::Validity::NonNullable);
4341
Zstd::from_primitive(&values, 0, 0).unwrap()
4442
}
4543

4644
fn zstd_large() -> ZstdArray {
47-
let values = PrimitiveArray::new(
48-
buffer![0u32..1000],
49-
vortex_array::validity::Validity::NonNullable,
50-
);
45+
let values = PrimitiveArray::new(buffer![0u32..1000], validity::Validity::NonNullable);
5146
Zstd::from_primitive(&values, 3, 0).unwrap()
5247
}
5348

5449
fn zstd_all_same() -> ZstdArray {
55-
let values = PrimitiveArray::new(
56-
buffer![42i32; 100],
57-
vortex_array::validity::Validity::NonNullable,
58-
);
50+
let values = PrimitiveArray::new(buffer![42i32; 100], validity::Validity::NonNullable);
5951
Zstd::from_primitive(&values, 0, 0).unwrap()
6052
}
6153

encodings/zstd/src/zstd_buffers.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use vortex_array::dtype::DType;
2121
use vortex_array::scalar::Scalar;
2222
use vortex_array::serde::ArrayChildren;
2323
use vortex_array::session::ArraySessionExt;
24+
use vortex_array::validity::Validity;
2425
use vortex_array::vtable;
2526
use vortex_array::vtable::OperationsVTable;
2627
use vortex_array::vtable::VTable;
@@ -490,11 +491,9 @@ impl OperationsVTable<ZstdBuffers> for ZstdBuffers {
490491
}
491492

492493
impl ValidityVTable<ZstdBuffers> for ZstdBuffers {
493-
fn validity(
494-
array: ArrayView<'_, ZstdBuffers>,
495-
) -> VortexResult<vortex_array::validity::Validity> {
494+
fn validity(array: ArrayView<'_, ZstdBuffers>) -> VortexResult<Validity> {
496495
if !array.dtype().is_nullable() {
497-
return Ok(vortex_array::validity::Validity::NonNullable);
496+
return Ok(Validity::NonNullable);
498497
}
499498

500499
let inner_array = array.data().decompress_and_build_inner(

vortex-array/src/expr/transform/match_between.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
// SPDX-License-Identifier: Apache-2.0
22
// SPDX-FileCopyrightText: Copyright the Vortex contributors
33

4+
use vortex_error::VortexExpect;
5+
46
use crate::expr::Expression;
57
use crate::expr::and_collect;
68
use crate::expr::forms::conjuncts;
7-
use crate::expr::lit;
89
use crate::scalar_fn::ScalarFnVTableExt;
910
use crate::scalar_fn::fns::between::Between;
1011
use crate::scalar_fn::fns::between::BetweenOptions;
@@ -45,7 +46,8 @@ pub fn find_between(expr: Expression) -> Expression {
4546
}
4647
}
4748

48-
and_collect(rest).unwrap_or_else(|| lit(true))
49+
debug_assert!(!rest.is_empty());
50+
and_collect(rest).vortex_expect("find_between must produce at least one conjunct")
4951
}
5052

5153
fn maybe_match(lhs: &Expression, rhs: &Expression) -> Option<Expression> {

0 commit comments

Comments
 (0)