Skip to content

Commit 0d49f0d

Browse files
committed
Fix array_sort for empty record batch
1 parent 06c780f commit 0d49f0d

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

datafusion/functions-nested/src/sort.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,12 @@ pub fn array_sort_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
171171
return Ok(Arc::clone(&args[0]));
172172
}
173173

174+
let list_array = as_list_array(&args[0])?;
175+
let row_count = list_array.len();
176+
if row_count == 0 || list_array.value_type().is_null() {
177+
return Ok(Arc::clone(&args[0]));
178+
}
179+
174180
if args[1..].iter().any(|array| array.is_null(0)) {
175181
return Ok(new_null_array(args[0].data_type(), args[0].len()));
176182
}
@@ -195,12 +201,6 @@ pub fn array_sort_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
195201
_ => return exec_err!("array_sort expects 1 to 3 arguments"),
196202
};
197203

198-
let list_array = as_list_array(&args[0])?;
199-
let row_count = list_array.len();
200-
if row_count == 0 || list_array.value_type().is_null() {
201-
return Ok(Arc::clone(&args[0]));
202-
}
203-
204204
let mut array_lengths = vec![];
205205
let mut arrays = vec![];
206206
let mut valid = NullBufferBuilder::new(row_count);

datafusion/sqllogictest/test_files/array.slt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2348,6 +2348,11 @@ NULL
23482348
[NULL, 51, 52, 54, 55, 56, 57, 58, 59, 60]
23492349
[61, 62, 63, 64, 65, 66, 67, 68, 69, 70]
23502350

2351+
# test with empty table
2352+
query ?
2353+
select array_sort(column1, 'DESC', 'NULLS FIRST') from arrays_values where false;
2354+
----
2355+
23512356
# test with empty array
23522357
query ?
23532358
select array_sort([]);

0 commit comments

Comments
 (0)