diff --git a/encodings/fastlanes/src/bitpacking/vtable/mod.rs b/encodings/fastlanes/src/bitpacking/vtable/mod.rs index c414dfa5cc0..99edcdd93f3 100644 --- a/encodings/fastlanes/src/bitpacking/vtable/mod.rs +++ b/encodings/fastlanes/src/bitpacking/vtable/mod.rs @@ -247,6 +247,18 @@ impl VTable for BitPacked { } fn serialize(metadata: Self::Metadata) -> VortexResult>> { + vortex_ensure!( + metadata.offset == 0, + "BitPackedArray offset must be 0 for serialization, got {}", + metadata.offset + ); + if let Some(ref patches) = metadata.patches { + vortex_ensure!( + patches.offset()? == 0, + "BitPackedArray patches offset must be 0 for serialization, got {}", + patches.offset()? + ); + } Ok(Some(metadata.serialize())) } diff --git a/encodings/fastlanes/src/delta/vtable/mod.rs b/encodings/fastlanes/src/delta/vtable/mod.rs index 790dedc6873..05bf04d8dcc 100644 --- a/encodings/fastlanes/src/delta/vtable/mod.rs +++ b/encodings/fastlanes/src/delta/vtable/mod.rs @@ -152,6 +152,11 @@ impl VTable for Delta { } fn serialize(metadata: Self::Metadata) -> VortexResult>> { + vortex_ensure!( + metadata.offset == 0, + "DeltaArray offset must be 0 for serialization, got {}", + metadata.offset + ); Ok(Some(metadata.0.encode_to_vec())) } diff --git a/encodings/fastlanes/src/rle/array/mod.rs b/encodings/fastlanes/src/rle/array/mod.rs index 77c584ce331..cdca49809eb 100644 --- a/encodings/fastlanes/src/rle/array/mod.rs +++ b/encodings/fastlanes/src/rle/array/mod.rs @@ -504,18 +504,16 @@ mod tests { let concat = concat.freeze(); let parts = ArrayParts::try_from(concat).unwrap(); - let decoded = parts - .decode( - sliced.dtype(), - sliced.len(), - &ReadContext::new(ctx.to_ids()), - &SESSION, - ) - .unwrap(); - - let original_data = sliced.to_primitive(); - let decoded_data = decoded.to_primitive(); + let decoded = parts.decode( + sliced.dtype(), + sliced.len(), + &ReadContext::new(ctx.to_ids()), + &SESSION, + ); - assert_arrays_eq!(original_data, decoded_data); + assert_eq!( + decoded.err().unwrap().to_string(), + "Other error: RLEArray offset must be 0 for serialization, got 100" + ); } } diff --git a/encodings/fastlanes/src/rle/vtable/mod.rs b/encodings/fastlanes/src/rle/vtable/mod.rs index 0df4126cbf5..2e8c1607580 100644 --- a/encodings/fastlanes/src/rle/vtable/mod.rs +++ b/encodings/fastlanes/src/rle/vtable/mod.rs @@ -171,6 +171,11 @@ impl VTable for RLE { } fn serialize(metadata: Self::Metadata) -> VortexResult>> { + vortex_ensure!( + metadata.offset == 0, + "RLEArray offset must be 0 for serialization, got {}", + metadata.offset + ); Ok(Some(metadata.0.encode_to_vec())) } diff --git a/encodings/runend/src/array.rs b/encodings/runend/src/array.rs index 6dd3fdc521d..a4b790a78f5 100644 --- a/encodings/runend/src/array.rs +++ b/encodings/runend/src/array.rs @@ -137,6 +137,11 @@ impl VTable for RunEnd { } fn serialize(metadata: Self::Metadata) -> VortexResult>> { + vortex_ensure!( + metadata.offset == 0, + "RunEndArray offset must be 0 for serialization, got {}", + metadata.offset + ); Ok(Some(metadata.serialize())) }