vortex_array/arrays/constant/compute/
fill_null.rs1use vortex_error::VortexResult;
5
6use crate::ArrayRef;
7use crate::arrays::ConstantArray;
8use crate::arrays::ConstantVTable;
9use crate::scalar::Scalar;
10use crate::scalar_fn::fns::fill_null::FillNullReduce;
11use crate::scalar_fn::fns::fill_null::fill_null_constant;
12
13impl FillNullReduce for ConstantVTable {
14 fn fill_null(array: &ConstantArray, fill_value: &Scalar) -> VortexResult<Option<ArrayRef>> {
15 fill_null_constant(array, fill_value).map(Some)
16 }
17}
18
19#[cfg(test)]
20mod test {
21 use crate::IntoArray as _;
22 use crate::arrays::ConstantArray;
23 use crate::arrow::IntoArrowArray as _;
24 use crate::builtins::ArrayBuiltins;
25 use crate::dtype::DType;
26 use crate::dtype::Nullability;
27 use crate::dtype::PType;
28 use crate::scalar::Scalar;
29
30 #[test]
31 fn test_null() {
32 let actual = ConstantArray::new(Scalar::null_native::<i32>(), 3)
33 .into_array()
34 .fill_null(Scalar::from(1))
35 .unwrap();
36 let expected = ConstantArray::new(Scalar::from(1), 3).into_array();
37
38 assert!(!actual.dtype().is_nullable());
39
40 let actual_arrow = actual.clone().into_arrow_preferred().unwrap();
41 let expected_arrow = expected.clone().into_arrow_preferred().unwrap();
42 assert_eq!(
43 &actual_arrow,
44 &expected_arrow,
45 "{}, {}",
46 actual.display_values(),
47 expected.display_values()
48 );
49 }
50
51 #[test]
52 fn test_non_null() {
53 let actual = ConstantArray::new(Scalar::from(Some(1)), 3)
54 .into_array()
55 .fill_null(Scalar::from(1))
56 .unwrap();
57 let expected = ConstantArray::new(Scalar::from(1), 3).into_array();
58
59 assert!(!actual.dtype().is_nullable());
60
61 let actual_arrow = actual.clone().into_arrow_preferred().unwrap();
62 let expected_arrow = expected.clone().into_arrow_preferred().unwrap();
63 assert_eq!(
64 &actual_arrow,
65 &expected_arrow,
66 "{}, {}",
67 actual.display_values(),
68 expected.display_values()
69 );
70 }
71
72 #[test]
73 fn test_non_nullable_with_nullable() {
74 let actual = ConstantArray::new(Scalar::from(1), 3)
75 .into_array()
76 .fill_null(Scalar::new(
77 DType::Primitive(PType::I32, Nullability::Nullable),
78 Some(1.into()),
79 ))
80 .unwrap();
81 let expected = ConstantArray::new(Scalar::from(1), 3).into_array();
82
83 assert!(!Scalar::from(1).dtype().is_nullable());
84
85 assert!(actual.dtype().is_nullable());
86
87 let actual_arrow = actual.clone().into_arrow_preferred().unwrap();
88 let expected_arrow = expected.clone().into_arrow_preferred().unwrap();
89 assert_eq!(
90 &actual_arrow,
91 &expected_arrow,
92 "{}, {}",
93 actual.display_values(),
94 expected.display_values()
95 );
96 }
97}