Skip to main content

vortex_array/compute/
fill_null.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_error::VortexResult;
5use vortex_error::vortex_ensure;
6
7use crate::Array;
8use crate::ArrayRef;
9use crate::builtins::ArrayBuiltins;
10use crate::scalar::Scalar;
11
12/// Replace nulls in the array with another value.
13///
14/// # Examples
15///
16/// ```
17/// use vortex_array::arrays::{PrimitiveArray};
18/// use vortex_array::compute::{fill_null};
19/// use vortex_array::scalar::Scalar;
20///
21/// let array =
22///     PrimitiveArray::from_option_iter([Some(0i32), None, Some(1i32), None, Some(2i32)]);
23/// let array = fill_null(array.as_ref(), &Scalar::from(42i32)).unwrap();
24/// assert_eq!(array.display_values().to_string(), "[0i32, 42i32, 1i32, 42i32, 2i32]");
25/// ```
26#[deprecated(note = "use array.fill_null(scalar) via ArrayBuiltins instead")]
27pub fn fill_null(array: &dyn Array, fill_value: &Scalar) -> VortexResult<ArrayRef> {
28    vortex_ensure!(
29        !fill_value.is_null(),
30        "fill_null requires a non-null fill value"
31    );
32    let result = array.to_array().fill_null(fill_value.clone())?;
33    debug_assert!(
34        fill_value.dtype().is_nullable() || !result.dtype().is_nullable(),
35        "fill_null with non-nullable fill value must produce a non-nullable result"
36    );
37    Ok(result)
38}