@@ -28,7 +28,7 @@ use arrow::datatypes::{
2828use std:: any:: Any ;
2929
3030use datafusion_common:: cast:: { as_large_list_array, as_list_array} ;
31- use datafusion_common:: { exec_err, plan_err, Result } ;
31+ use datafusion_common:: { exec_err, plan_err, utils :: take_function_args , Result } ;
3232
3333use crate :: utils:: { compute_array_dims, make_scalar_function} ;
3434use datafusion_expr:: {
@@ -203,20 +203,18 @@ impl ScalarUDFImpl for ArrayNdims {
203203
204204/// Array_dims SQL function
205205pub fn array_dims_inner ( args : & [ ArrayRef ] ) -> Result < ArrayRef > {
206- if args. len ( ) != 1 {
207- return exec_err ! ( "array_dims needs one argument" ) ;
208- }
206+ let [ array] = take_function_args ( "array_dims" , args) ?;
209207
210- let data = match args [ 0 ] . data_type ( ) {
208+ let data = match array . data_type ( ) {
211209 List ( _) => {
212- let array = as_list_array ( & args [ 0 ] ) ?;
210+ let array = as_list_array ( & array ) ?;
213211 array
214212 . iter ( )
215213 . map ( compute_array_dims)
216214 . collect :: < Result < Vec < _ > > > ( ) ?
217215 }
218216 LargeList ( _) => {
219- let array = as_large_list_array ( & args [ 0 ] ) ?;
217+ let array = as_large_list_array ( & array ) ?;
220218 array
221219 . iter ( )
222220 . map ( compute_array_dims)
@@ -234,9 +232,7 @@ pub fn array_dims_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
234232
235233/// Array_ndims SQL function
236234pub fn array_ndims_inner ( args : & [ ArrayRef ] ) -> Result < ArrayRef > {
237- if args. len ( ) != 1 {
238- return exec_err ! ( "array_ndims needs one argument" ) ;
239- }
235+ let [ array_dim] = take_function_args ( "array_ndims" , args) ?;
240236
241237 fn general_list_ndims < O : OffsetSizeTrait > (
242238 array : & GenericListArray < O > ,
@@ -254,13 +250,13 @@ pub fn array_ndims_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
254250
255251 Ok ( Arc :: new ( UInt64Array :: from ( data) ) as ArrayRef )
256252 }
257- match args [ 0 ] . data_type ( ) {
253+ match array_dim . data_type ( ) {
258254 List ( _) => {
259- let array = as_list_array ( & args [ 0 ] ) ?;
255+ let array = as_list_array ( & array_dim ) ?;
260256 general_list_ndims :: < i32 > ( array)
261257 }
262258 LargeList ( _) => {
263- let array = as_large_list_array ( & args [ 0 ] ) ?;
259+ let array = as_large_list_array ( & array_dim ) ?;
264260 general_list_ndims :: < i64 > ( array)
265261 }
266262 array_type => exec_err ! ( "array_ndims does not support type {array_type:?}" ) ,
0 commit comments