MCPcopy Create free account
hub / github.com/apache/datafusion / compute_null_mask

Function compute_null_mask

datafusion/spark/src/function/null_utils.rs:34–72  ·  view source on GitHub ↗
(args: &[ColumnarValue])

Source from the content-addressed store, hash-verified

32}
33
34pub(crate) fn compute_null_mask(args: &[ColumnarValue]) -> NullMaskResolution {
35 let mut array_len = None;
36 let mut has_null_scalar = false;
37
38 for arg in args {
39 match arg {
40 ColumnarValue::Array(array) => {
41 array_len.get_or_insert_with(|| array.len());
42 }
43 ColumnarValue::Scalar(scalar) => {
44 has_null_scalar |= scalar.is_null();
45 }
46 }
47 }
48
49 let Some(array_len) = array_len else {
50 // All arguments are scalars
51 return if has_null_scalar {
52 NullMaskResolution::ReturnNull
53 } else {
54 NullMaskResolution::NoMask
55 };
56 };
57
58 if has_null_scalar {
59 return NullMaskResolution::Apply(NullBuffer::new_null(array_len));
60 }
61
62 let combined_nulls =
63 NullBuffer::union_many(args.iter().filter_map(|arg| match arg {
64 ColumnarValue::Array(array) => Some(array.nulls()),
65 ColumnarValue::Scalar(_) => None,
66 }));
67
68 match combined_nulls {
69 Some(nulls) => NullMaskResolution::Apply(nulls),
70 None => NullMaskResolution::NoMask,
71 }
72}
73
74/// Apply NULL mask to the result using NullBuffer::union
75pub(crate) fn apply_null_mask(

Callers 2

spark_concatFunction · 0.85
spark_array_repeatFunction · 0.85

Calls 4

lenMethod · 0.45
is_nullMethod · 0.45
iterMethod · 0.45
nullsMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…