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

Function apply_null_mask

datafusion/spark/src/function/null_utils.rs:75–108  ·  view source on GitHub ↗

Apply NULL mask to the result using NullBuffer::union

(
    result: ColumnarValue,
    null_mask: NullMaskResolution,
    return_type: &DataType,
)

Source from the content-addressed store, hash-verified

73
74/// Apply NULL mask to the result using NullBuffer::union
75pub(crate) fn apply_null_mask(
76 result: ColumnarValue,
77 null_mask: NullMaskResolution,
78 return_type: &DataType,
79) -> Result<ColumnarValue> {
80 match (result, null_mask) {
81 // Scalar with ReturnNull mask means return NULL of the correct type
82 (ColumnarValue::Scalar(_), NullMaskResolution::ReturnNull) => {
83 Ok(ColumnarValue::Scalar(ScalarValue::try_from(return_type)?))
84 }
85 // Scalar without mask, return as-is
86 (scalar @ ColumnarValue::Scalar(_), NullMaskResolution::NoMask) => Ok(scalar),
87 // Array with NULL mask - use NullBuffer::union to combine nulls
88 (ColumnarValue::Array(array), NullMaskResolution::Apply(null_mask)) => {
89 // Combine the result's existing nulls with our computed null mask
90 let combined_nulls = NullBuffer::union(array.nulls(), Some(&null_mask));
91
92 // Create new array with combined nulls
93 let new_array = array
94 .into_data()
95 .into_builder()
96 .nulls(combined_nulls)
97 .build()?;
98
99 Ok(ColumnarValue::Array(Arc::new(arrow::array::make_array(
100 new_array,
101 ))))
102 }
103 // Array without NULL mask, return as-is
104 (array @ ColumnarValue::Array(_), NullMaskResolution::NoMask) => Ok(array),
105 // Edge cases that shouldn't happen in practice
106 (scalar, _) => Ok(scalar),
107 }
108}

Callers 2

spark_concatFunction · 0.85
spark_array_repeatFunction · 0.85

Calls 5

newFunction · 0.85
make_arrayFunction · 0.85
unionFunction · 0.50
nullsMethod · 0.45
buildMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…