Skip to content

Commit 05bd6de

Browse files
committed
Fix array_sort for empty record batch
1 parent b6ddc6c commit 05bd6de

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

datafusion/functions-array/src/sort.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ pub fn array_sort_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
9898
return exec_err!("array_sort expects one to three arguments");
9999
}
100100

101+
let list_array = as_list_array(&args[0])?;
102+
let row_count = list_array.len();
103+
if row_count == 0 || list_array.value_type().is_null() {
104+
return Ok(Arc::clone(&args[0]));
105+
}
106+
101107
let sort_option = match args.len() {
102108
1 => None,
103109
2 => {
@@ -118,12 +124,6 @@ pub fn array_sort_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
118124
_ => return exec_err!("array_sort expects 1 to 3 arguments"),
119125
};
120126

121-
let list_array = as_list_array(&args[0])?;
122-
let row_count = list_array.len();
123-
if row_count == 0 {
124-
return Ok(args[0].clone());
125-
}
126-
127127
let mut array_lengths = vec![];
128128
let mut arrays = vec![];
129129
let mut valid = BooleanBufferBuilder::new(row_count);

datafusion/sqllogictest/test_files/array.slt

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

2041+
# test with empty table
2042+
query ?
2043+
select array_sort(column1, 'DESC', 'NULLS FIRST') from arrays_values where false;
2044+
----
2045+
20412046
# test with empty array
20422047
query ?
20432048
select array_sort([]);

0 commit comments

Comments
 (0)