(args: &[ArrayRef])
| 148 | } |
| 149 | |
| 150 | fn 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 | |
| 198 | fn array_sort_generic<OffsetSize: OffsetSizeTrait>( |
| 199 | list_array: &GenericListArray<OffsetSize>, |
nothing calls this directly
no test coverage detected
searching dependent graphs…