Skip to content

Commit 6ea23a7

Browse files
committed
fix
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
1 parent 0fe6999 commit 6ea23a7

4 files changed

Lines changed: 22 additions & 19 deletions

File tree

  • encodings
    • datetime-parts/src/compute
    • decimal-byte-parts/src/decimal_byte_parts/compute
    • fastlanes/src/rle/compute
  • vortex-array/src/arrays/primitive/array

encodings/datetime-parts/src/compute/cast.rs

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

4+
use vortex_array::Array;
45
use vortex_array::ArrayRef;
56
use vortex_array::IntoArray;
67
use vortex_array::builtins::ArrayBuiltins;
@@ -90,21 +91,17 @@ mod tests {
9091
#[case(Validity::from_iter([true, false, true]))]
9192
fn test_bad_cast_fails(#[case] validity: Validity) {
9293
let array = date_time_array(validity);
93-
let result = array.cast(DType::Bool(Nullability::NonNullable));
94-
assert!(
95-
result.as_ref().is_err_and(|err| err
96-
.to_string()
97-
.contains("No CastKernel to cast canonical array")),
98-
"Got error: {result:?}"
99-
);
94+
// Cast to incompatible type - force evaluation via to_canonical
95+
let result = array
96+
.cast(DType::Bool(Nullability::NonNullable))
97+
.and_then(|a| a.to_canonical().map(|c| c.into_array()));
98+
assert!(result.is_err(), "Expected error, got: {result:?}");
10099

101-
let result = array.cast(array.dtype().with_nullability(Nullability::NonNullable));
102-
assert!(
103-
result.as_ref().is_err_and(|err| err
104-
.to_string()
105-
.contains("invalid values to non-nullable type")),
106-
"Got error: {result:?}"
107-
);
100+
// Cast nullable with nulls to non-nullable - force evaluation via to_canonical
101+
let result = array
102+
.cast(array.dtype().with_nullability(Nullability::NonNullable))
103+
.and_then(|a| a.to_canonical().map(|c| c.into_array()));
104+
assert!(result.is_err(), "Expected error, got: {result:?}");
108105
}
109106

110107
#[rstest]

encodings/decimal-byte-parts/src/decimal_byte_parts/compute/cast.rs

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

4+
use vortex_array::Array;
45
use vortex_array::ArrayRef;
56
use vortex_array::IntoArray;
67
use vortex_array::builtins::ArrayBuiltins;
@@ -86,10 +87,11 @@ mod tests {
8687
)
8788
.unwrap();
8889

89-
// Cast to non-nullable should fail due to nulls
90+
// Cast to non-nullable should fail due to nulls - force evaluation via to_canonical
9091
let result = array
9192
.to_array()
92-
.cast(DType::Decimal(decimal_dtype, Nullability::NonNullable));
93+
.cast(DType::Decimal(decimal_dtype, Nullability::NonNullable))
94+
.and_then(|a| a.to_canonical().map(|c| c.into_array()));
9395
assert!(result.is_err());
9496
}
9597

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

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

4+
use vortex_array::Array;
45
use vortex_array::ArrayRef;
56
use vortex_array::builtins::ArrayBuiltins;
67
use vortex_array::compute::CastReduce;
@@ -42,6 +43,8 @@ impl CastReduce for RLEVTable {
4243
#[cfg(test)]
4344
mod tests {
4445
use rstest::rstest;
46+
use vortex_array::Array;
47+
use vortex_array::IntoArray;
4548
use vortex_array::arrays::PrimitiveArray;
4649
use vortex_array::builtins::ArrayBuiltins;
4750
use vortex_array::compute::conformance::cast::test_cast_conformance;
@@ -81,6 +84,7 @@ mod tests {
8184
let rle = RLEArray::encode(&primitive).unwrap();
8285
rle.to_array()
8386
.cast(DType::Primitive(PType::U8, Nullability::NonNullable))
87+
.and_then(|a| a.to_canonical().map(|c| c.into_array()))
8488
.unwrap();
8589
}
8690

vortex-array/src/arrays/primitive/array/patch.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use vortex_dtype::match_each_integer_ptype;
1010
use vortex_dtype::match_each_native_ptype;
1111
use vortex_error::VortexResult;
1212

13-
use crate::ToCanonical;
13+
use crate::Array;
1414
use crate::arrays::PrimitiveArray;
1515
use crate::patches::PATCH_CHUNK_SIZE;
1616
use crate::patches::Patches;
@@ -19,8 +19,8 @@ use crate::vtable::ValidityHelper;
1919

2020
impl PrimitiveArray {
2121
pub fn patch(self, patches: &Patches) -> VortexResult<Self> {
22-
let patch_indices = patches.indices().to_primitive();
23-
let patch_values = patches.values().to_primitive();
22+
let patch_indices = patches.indices().to_canonical()?.into_primitive();
23+
let patch_values = patches.values().to_canonical()?.into_primitive();
2424

2525
let patched_validity = self.validity().clone().patch(
2626
self.len(),

0 commit comments

Comments
 (0)