Skip to content

Commit 4d34b5f

Browse files
authored
fix: RunEndBool scalar_at respects array's nullability (#1683)
1 parent fc58b6d commit 4d34b5f

File tree

1 file changed

+20
-6
lines changed
  • encodings/runend-bool/src/compute

1 file changed

+20
-6
lines changed

encodings/runend-bool/src/compute/mod.rs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ mod invert;
33
use vortex_array::array::BoolArray;
44
use vortex_array::compute::{slice, ComputeVTable, InvertFn, ScalarAtFn, SliceFn, TakeFn};
55
use vortex_array::variants::PrimitiveArrayTrait;
6-
use vortex_array::{ArrayData, ArrayLen, IntoArrayData, IntoArrayVariant, ToArrayData};
6+
use vortex_array::{ArrayDType, ArrayData, ArrayLen, IntoArrayData, IntoArrayVariant, ToArrayData};
77
use vortex_dtype::match_each_integer_ptype;
88
use vortex_error::{vortex_bail, VortexResult};
99
use vortex_scalar::Scalar;
@@ -29,10 +29,10 @@ impl ComputeVTable for RunEndBoolEncoding {
2929
impl ScalarAtFn<RunEndBoolArray> for RunEndBoolEncoding {
3030
fn scalar_at(&self, array: &RunEndBoolArray, index: usize) -> VortexResult<Scalar> {
3131
let start = array.start();
32-
Ok(Scalar::from(value_at_index(
33-
array.find_physical_index(index)?,
34-
start,
35-
)))
32+
Ok(Scalar::bool(
33+
value_at_index(array.find_physical_index(index)?, start),
34+
array.dtype().nullability(),
35+
))
3636
}
3737
}
3838

@@ -90,9 +90,11 @@ impl SliceFn<RunEndBoolArray> for RunEndBoolEncoding {
9090

9191
#[cfg(test)]
9292
mod tests {
93-
use vortex_array::compute::slice;
93+
use vortex_array::compute::{scalar_at, slice};
9494
use vortex_array::validity::Validity;
9595
use vortex_array::{ArrayLen, IntoArrayData};
96+
use vortex_dtype::Nullability;
97+
use vortex_scalar::Scalar;
9698

9799
use crate::RunEndBoolArray;
98100

@@ -110,4 +112,16 @@ mod tests {
110112
let re_slice = RunEndBoolArray::try_from(sliced_array).unwrap();
111113
assert!(re_slice.ends().is_empty());
112114
}
115+
116+
#[test]
117+
fn scalar_at_nullability() {
118+
let re_array =
119+
RunEndBoolArray::try_new(vec![7_u64, 10].into_array(), false, Validity::AllValid)
120+
.unwrap();
121+
122+
assert_eq!(
123+
scalar_at(&re_array, 0).unwrap(),
124+
Scalar::bool(false, Nullability::Nullable)
125+
);
126+
}
113127
}

0 commit comments

Comments
 (0)