Skip to content

Commit 3cc1b6a

Browse files
chore[array]: fill null remove and dep fill_null(array, scalar) (#6437)
## Does this PR closes an open issue or discussion? <!-- This helps us keep track of fixed issues and changes. --> - Closes #. ## What changes are included in this PR? Cleaned & deprecated up the `fill_null` compute function <!-- What changes are included here, if an issue or discussion are attached, there's no need to duplicate the details. --> ## What is the rationale for this change? <!-- Why do you propose this change, and why did you choose this approach. This helps reviewers and other readers understand changes, creates a shared understanding of the issue and codebase, and improves their ability to work with this change and offer better suggestions. --> ## How is this change tested? <!-- Changes should be tested, we expect changes to fit in one of the following categories: 1. Verifying existing behavior is maintained. 2. For serialization related changes - Compatibility should be maintained or explicitly broken. 3. For new behavior and functionality, this helps us maintaining that desired behavior in the future. --> ## Are there any user-facing changes? <!-- Does the change affect users in what of the following ways: 1. Breaks public APIs in some way. 2. Changes the underlying behavior of one of the integrations. 3. Should some documentation be changed to reflect this change? In the case some public API is changed in a breaking way, make sure to add the appropriate label. --> `#[deprecated(note = "use array.fill_null(scalar) via ArrayBuiltins instead")]` Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
1 parent 821884e commit 3cc1b6a

22 files changed

Lines changed: 127 additions & 130 deletions

File tree

encodings/alp/src/alp_rd/compute/take.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use vortex_array::ArrayRef;
66
use vortex_array::ExecutionCtx;
77
use vortex_array::IntoArray;
88
use vortex_array::arrays::TakeExecute;
9-
use vortex_array::compute::fill_null;
9+
use vortex_array::builtins::ArrayBuiltins;
1010
use vortex_error::VortexResult;
1111
use vortex_scalar::Scalar;
1212

@@ -33,10 +33,10 @@ impl TakeExecute for ALPRDVTable {
3333
p.cast_values(&values_dtype)
3434
})
3535
.transpose()?;
36-
let right_parts = fill_null(
37-
&array.right_parts().take(indices.to_array())?,
38-
&Scalar::zero_value(array.right_parts().dtype()),
39-
)?;
36+
let right_parts = array
37+
.right_parts()
38+
.take(indices.to_array())?
39+
.fill_null(Scalar::zero_value(array.right_parts().dtype()))?;
4040

4141
Ok(Some(
4242
ALPRDArray::try_new(

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use vortex_array::ExecutionCtx;
77
use vortex_array::IntoArray;
88
use vortex_array::ToCanonical;
99
use vortex_array::arrays::TakeExecute;
10-
use vortex_array::compute::fill_null;
10+
use vortex_array::builtins::ArrayBuiltins;
1111
use vortex_array::expr::stats::Stat;
1212
use vortex_array::expr::stats::StatsProvider;
1313
use vortex_dtype::Nullability;
@@ -68,7 +68,7 @@ fn take_datetime_parts(array: &DateTimePartsArray, indices: &dyn Array) -> Vorte
6868
.map(|s| s.into_inner())
6969
.unwrap_or_else(|| Scalar::primitive(0i64, Nullability::NonNullable))
7070
.cast(array.seconds().dtype())?;
71-
let taken_seconds = fill_null(taken_seconds.as_ref(), &seconds_fill)?;
71+
let taken_seconds = taken_seconds.fill_null(seconds_fill)?;
7272

7373
let subseconds_fill = array
7474
.subseconds()
@@ -77,7 +77,7 @@ fn take_datetime_parts(array: &DateTimePartsArray, indices: &dyn Array) -> Vorte
7777
.map(|s| s.into_inner())
7878
.unwrap_or_else(|| Scalar::primitive(0i64, Nullability::NonNullable))
7979
.cast(array.subseconds().dtype())?;
80-
let taken_subseconds = fill_null(taken_subseconds.as_ref(), &subseconds_fill)?;
80+
let taken_subseconds = taken_subseconds.fill_null(subseconds_fill)?;
8181

8282
Ok(
8383
DateTimePartsArray::try_new(dtype, taken_days, taken_seconds, taken_subseconds)?

encodings/fsst/src/compute/mod.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use vortex_array::ExecutionCtx;
1111
use vortex_array::IntoArray;
1212
use vortex_array::arrays::TakeExecute;
1313
use vortex_array::arrays::VarBinVTable;
14-
use vortex_array::compute::fill_null;
14+
use vortex_array::builtins::ArrayBuiltins;
1515
use vortex_error::VortexExpect;
1616
use vortex_error::VortexResult;
1717
use vortex_error::vortex_err;
@@ -38,10 +38,12 @@ impl TakeExecute for FSSTVTable {
3838
.vortex_expect("cannot fail")
3939
.try_into::<VarBinVTable>()
4040
.map_err(|_| vortex_err!("take for codes must return varbin array"))?,
41-
fill_null(
42-
&array.uncompressed_lengths().take(indices.to_array())?,
43-
&Scalar::zero_value(&array.uncompressed_lengths_dtype().clone()),
44-
)?,
41+
array
42+
.uncompressed_lengths()
43+
.take(indices.to_array())?
44+
.fill_null(Scalar::zero_value(
45+
&array.uncompressed_lengths_dtype().clone(),
46+
))?,
4547
)?
4648
.into_array(),
4749
))

encodings/sparse/src/lib.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ use vortex_array::ProstMetadata;
1919
use vortex_array::ToCanonical;
2020
use vortex_array::arrays::ConstantArray;
2121
use vortex_array::buffer::BufferHandle;
22+
use vortex_array::builtins::ArrayBuiltins;
2223
use vortex_array::compute::Operator;
2324
use vortex_array::compute::compare;
24-
use vortex_array::compute::fill_null;
2525
use vortex_array::compute::filter;
2626
use vortex_array::compute::sub_scalar;
2727
use vortex_array::patches::Patches;
@@ -343,12 +343,10 @@ impl SparseArray {
343343

344344
let fill_array = ConstantArray::new(fill.clone(), array.len()).into_array();
345345
let non_top_mask = Mask::from_buffer(
346-
fill_null(
347-
&compare(array, &fill_array, Operator::NotEq)?,
348-
&Scalar::bool(true, Nullability::NonNullable),
349-
)?
350-
.to_bool()
351-
.to_bit_buffer(),
346+
compare(array, &fill_array, Operator::NotEq)?
347+
.fill_null(Scalar::bool(true, Nullability::NonNullable))?
348+
.to_bool()
349+
.to_bit_buffer(),
352350
);
353351

354352
let non_top_values = filter(array, &non_top_mask)?;

fuzz/src/array/fill_null.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use vortex_array::arrays::ConstantArray;
1010
use vortex_array::arrays::DecimalArray;
1111
use vortex_array::arrays::PrimitiveArray;
1212
use vortex_array::arrays::VarBinViewArray;
13-
use vortex_array::compute::fill_null;
13+
use vortex_array::builtins::ArrayBuiltins;
1414
use vortex_array::validity::Validity;
1515
use vortex_array::vtable::ValidityHelper;
1616
use vortex_buffer::Buffer;
@@ -43,7 +43,7 @@ pub fn fill_null_canonical_array(
4343
Canonical::Struct(_)
4444
| Canonical::List(_)
4545
| Canonical::FixedSizeList(_)
46-
| Canonical::Extension(_) => fill_null(canonical.as_ref(), fill_value)?,
46+
| Canonical::Extension(_) => canonical.into_array().fill_null(fill_value.clone())?,
4747
})
4848
}
4949

fuzz/src/array/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -551,9 +551,9 @@ pub fn compress_array(array: &dyn Array, _strategy: CompressorStrategy) -> Array
551551
#[allow(clippy::result_large_err)]
552552
pub fn run_fuzz_action(fuzz_action: FuzzArrayAction) -> crate::error::VortexFuzzResult<bool> {
553553
use vortex_array::arrays::ConstantArray;
554+
use vortex_array::builtins::ArrayBuiltins;
554555
use vortex_array::compute::cast;
555556
use vortex_array::compute::compare;
556-
use vortex_array::compute::fill_null;
557557
use vortex_array::compute::mask;
558558
use vortex_array::compute::min_max;
559559
use vortex_array::compute::sum;
@@ -636,7 +636,8 @@ pub fn run_fuzz_action(fuzz_action: FuzzArrayAction) -> crate::error::VortexFuzz
636636
assert_min_max_eq(&expected.min_max(), &min_max_result, i)?;
637637
}
638638
Action::FillNull(fill_value) => {
639-
current_array = fill_null(&current_array, &fill_value)
639+
current_array = current_array
640+
.fill_null(fill_value.clone())
640641
.vortex_expect("fill_null operation should succeed in fuzz test");
641642
assert_array_eq(&expected.array(), &current_array, i)?;
642643
}

vortex-array/src/arrays/bool/compute/fill_null.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,11 @@ mod tests {
4747
use vortex_buffer::bitbuffer;
4848
use vortex_dtype::DType;
4949
use vortex_dtype::Nullability;
50+
use vortex_scalar::Scalar;
5051

5152
use crate::arrays::BoolArray;
53+
use crate::builtins::ArrayBuiltins;
5254
use crate::canonical::ToCanonical;
53-
use crate::compute::fill_null;
5455
use crate::validity::Validity;
5556

5657
#[rstest]
@@ -61,7 +62,9 @@ mod tests {
6162
BitBuffer::from_iter([true, true, false, false]),
6263
Validity::from_iter([true, false, true, false]),
6364
);
64-
let non_null_array = fill_null(bool_array.as_ref(), &fill_value.into())
65+
let non_null_array = bool_array
66+
.to_array()
67+
.fill_null(Scalar::from(fill_value))
6568
.unwrap()
6669
.to_bool();
6770
assert_eq!(non_null_array.to_bit_buffer(), expected);

vortex-array/src/arrays/bool/compute/take.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use crate::arrays::BoolArray;
1818
use crate::arrays::BoolVTable;
1919
use crate::arrays::ConstantArray;
2020
use crate::arrays::TakeExecute;
21-
use crate::compute::fill_null;
21+
use crate::builtins::ArrayBuiltins;
2222
use crate::executor::ExecutionCtx;
2323
use crate::vtable::ValidityHelper;
2424

@@ -36,7 +36,9 @@ impl TakeExecute for BoolVTable {
3636
.into_array(),
3737
));
3838
}
39-
Mask::Values(_) => fill_null(indices, &Scalar::from(0).cast(indices.dtype())?)?,
39+
Mask::Values(_) => indices
40+
.to_array()
41+
.fill_null(Scalar::from(0).cast(indices.dtype())?)?,
4042
};
4143
let indices_nulls_zeroed = indices_nulls_zeroed.to_primitive();
4244
let buffer = match_each_integer_ptype!(indices_nulls_zeroed.ptype(), |I| {

vortex-array/src/arrays/chunked/compute/fill_null.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,12 @@ mod tests {
3232
use vortex_buffer::BitBuffer;
3333
use vortex_dtype::DType;
3434
use vortex_dtype::Nullability;
35+
use vortex_scalar::Scalar;
3536

3637
use crate::array::Array;
3738
use crate::arrays::BoolArray;
3839
use crate::arrays::ChunkedArray;
39-
use crate::compute::fill_null;
40+
use crate::builtins::ArrayBuiltins;
4041
use crate::validity::Validity;
4142

4243
#[test]
@@ -50,7 +51,7 @@ mod tests {
5051
)
5152
.unwrap();
5253

53-
let filled = fill_null(chunked.as_ref(), &false.into()).unwrap();
54+
let filled = chunked.to_array().fill_null(Scalar::from(false)).unwrap();
5455
assert_eq!(*filled.dtype(), DType::Bool(Nullability::NonNullable));
5556
}
5657
}

vortex-array/src/arrays/constant/compute/fill_null.rs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,14 @@ mod test {
3030
use crate::IntoArray as _;
3131
use crate::arrays::ConstantArray;
3232
use crate::arrow::IntoArrowArray as _;
33-
use crate::compute::fill_null;
33+
use crate::builtins::ArrayBuiltins;
3434

3535
#[test]
3636
fn test_null() {
37-
let actual = fill_null(
38-
&ConstantArray::new(Scalar::null_native::<i32>(), 3).into_array(),
39-
&Scalar::from(1),
40-
)
41-
.unwrap();
37+
let actual = ConstantArray::new(Scalar::null_native::<i32>(), 3)
38+
.into_array()
39+
.fill_null(Scalar::from(1))
40+
.unwrap();
4241
let expected = ConstantArray::new(Scalar::from(1), 3).into_array();
4342

4443
assert!(!actual.dtype().is_nullable());
@@ -56,11 +55,10 @@ mod test {
5655

5756
#[test]
5857
fn test_non_null() {
59-
let actual = fill_null(
60-
&ConstantArray::new(Scalar::from(Some(1)), 3).into_array(),
61-
&Scalar::from(1),
62-
)
63-
.unwrap();
58+
let actual = ConstantArray::new(Scalar::from(Some(1)), 3)
59+
.into_array()
60+
.fill_null(Scalar::from(1))
61+
.unwrap();
6462
let expected = ConstantArray::new(Scalar::from(1), 3).into_array();
6563

6664
assert!(!actual.dtype().is_nullable());
@@ -78,11 +76,10 @@ mod test {
7876

7977
#[test]
8078
fn test_non_nullable_with_nullable() {
81-
let actual = fill_null(
82-
&ConstantArray::new(Scalar::from(1), 3).into_array(),
83-
&Scalar::from(Some(1)),
84-
)
85-
.unwrap();
79+
let actual = ConstantArray::new(Scalar::from(1), 3)
80+
.into_array()
81+
.fill_null(Scalar::from(Some(1)))
82+
.unwrap();
8683
let expected = ConstantArray::new(Scalar::from(1), 3).into_array();
8784

8885
assert!(!Scalar::from(1).dtype().is_nullable());

0 commit comments

Comments
 (0)