Extracts flat list values, handling all fast-path short-circuits. - All-null input → `EarlyReturn(null scalar)` - All sublists empty and non-null → `EarlyReturn(default empty-list scalar)` - Otherwise → `Values(flat_values)`
(
list_array: &ArrayRef,
return_type: &DataType,
)
| 102 | /// - All sublists empty and non-null → `EarlyReturn(default empty-list scalar)` |
| 103 | /// - Otherwise → `Values(flat_values)` |
| 104 | pub(crate) fn extract_list_values( |
| 105 | list_array: &ArrayRef, |
| 106 | return_type: &DataType, |
| 107 | ) -> Result<ListValuesResult> { |
| 108 | if list_array.null_count() == list_array.len() { |
| 109 | return Ok(ListValuesResult::EarlyReturn(ColumnarValue::Scalar( |
| 110 | ScalarValue::try_new_null(return_type)?, |
| 111 | ))); |
| 112 | } |
| 113 | |
| 114 | let values = list_values(list_array)?; |
| 115 | |
| 116 | if values.is_empty() |
| 117 | && list_array.null_count() == 0 |
| 118 | && matches!(return_type, DataType::List(_) | DataType::LargeList(_)) |
| 119 | { |
| 120 | return Ok(ListValuesResult::EarlyReturn(ColumnarValue::Scalar( |
| 121 | ScalarValue::new_default(return_type)?, |
| 122 | ))); |
| 123 | } |
| 124 | |
| 125 | Ok(ListValuesResult::Values(values)) |
| 126 | } |
| 127 | |
| 128 | #[cfg(test)] |
| 129 | pub(crate) mod test_utils { |
no test coverage detected
searching dependent graphs…