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

Function array_sort_inner

datafusion/functions-nested/src/sort.rs:150–196  ·  view source on GitHub ↗
(args: &[ArrayRef])

Source from the content-addressed store, hash-verified

148}
149
150fn array_sort_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
151 if args.is_empty() || args.len() > 3 {
152 return exec_err!("array_sort expects one to three arguments");
153 }
154
155 if args[0].is_empty() || args[0].data_type().is_null() {
156 return Ok(Arc::clone(&args[0]));
157 }
158
159 if args[1..].iter().any(|array| array.is_null(0)) {
160 return Ok(new_null_array(args[0].data_type(), args[0].len()));
161 }
162
163 let sort_options = if args.len() >= 2 {
164 let order = as_string_array(&args[1])?.value(0);
165 let descending = order_desc(order)?;
166 let nulls_first = if args.len() >= 3 {
167 order_nulls_first(as_string_array(&args[2])?.value(0))?
168 } else {
169 true
170 };
171 Some(SortOptions {
172 descending,
173 nulls_first,
174 })
175 } else {
176 None
177 };
178
179 match args[0].data_type() {
180 DataType::List(field) | DataType::LargeList(field)
181 if field.data_type().is_null() =>
182 {
183 Ok(Arc::clone(&args[0]))
184 }
185 DataType::List(field) => {
186 let array = as_list_array(&args[0])?;
187 array_sort_generic(array, Arc::clone(field), sort_options)
188 }
189 DataType::LargeList(field) => {
190 let array = as_large_list_array(&args[0])?;
191 array_sort_generic(array, Arc::clone(field), sort_options)
192 }
193 // Signature should prevent this arm ever occurring
194 _ => exec_err!("array_sort expects list for first argument"),
195 }
196}
197
198fn array_sort_generic<OffsetSize: OffsetSizeTrait>(
199 list_array: &GenericListArray<OffsetSize>,

Callers

nothing calls this directly

Calls 13

as_string_arrayFunction · 0.85
order_descFunction · 0.85
order_nulls_firstFunction · 0.85
as_list_arrayFunction · 0.85
array_sort_genericFunction · 0.85
as_large_list_arrayFunction · 0.85
is_emptyMethod · 0.45
lenMethod · 0.45
is_nullMethod · 0.45
data_typeMethod · 0.45
anyMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…