@@ -141,12 +141,28 @@ pub mod test {
141141 ColumnarValue :: Array ( a) => Some ( a. len( ) ) ,
142142 } )
143143 . unwrap_or( 1 ) ;
144- let return_type = func. return_type( & type_array) ;
144+
145+ let scalar_arguments = $ARGS. iter( ) . map( |arg| match arg {
146+ ColumnarValue :: Scalar ( scalar) => Some ( scalar. clone( ) ) ,
147+ ColumnarValue :: Array ( _) => None ,
148+ } ) . collect:: <Vec <_>>( ) ;
149+ let scalar_arguments_refs = scalar_arguments. iter( ) . map( |arg| arg. as_ref( ) ) . collect:: <Vec <_>>( ) ;
150+
151+ let nullables = $ARGS. iter( ) . map( |arg| match arg {
152+ ColumnarValue :: Scalar ( scalar) => scalar. is_null( ) ,
153+ ColumnarValue :: Array ( a) => a. null_count( ) > 0 ,
154+ } ) . collect:: <Vec <_>>( ) ;
155+
156+ let return_info = func. return_type_from_args( datafusion_expr:: ReturnTypeArgs {
157+ arg_types: & type_array,
158+ scalar_arguments: & scalar_arguments_refs,
159+ nullables: & nullables
160+ } ) ;
145161
146162 match expected {
147163 Ok ( expected) => {
148- assert_eq!( return_type . is_ok( ) , true ) ;
149- let return_type = return_type . unwrap( ) ;
164+ assert_eq!( return_info . is_ok( ) , true ) ;
165+ let ( return_type, _nullable ) = return_info . unwrap( ) . into_parts ( ) ;
150166 assert_eq!( return_type, $EXPECTED_DATA_TYPE) ;
151167
152168 let result = func. invoke_with_args( datafusion_expr:: ScalarFunctionArgs { args: $ARGS, number_rows: cardinality, return_type: & return_type} ) ;
@@ -163,15 +179,17 @@ pub mod test {
163179 } ;
164180 }
165181 Err ( expected_error) => {
166- if return_type . is_err( ) {
167- match return_type {
182+ if return_info . is_err( ) {
183+ match return_info {
168184 Ok ( _) => assert!( false , "expected error" ) ,
169185 Err ( error) => { datafusion_common:: assert_contains!( expected_error. strip_backtrace( ) , error. strip_backtrace( ) ) ; }
170186 }
171187 }
172188 else {
189+ let ( return_type, _nullable) = return_info. unwrap( ) . into_parts( ) ;
190+
173191 // invoke is expected error - cannot use .expect_err() due to Debug not being implemented
174- match func. invoke_with_args( datafusion_expr:: ScalarFunctionArgs { args: $ARGS, number_rows: cardinality, return_type: & return_type. unwrap ( ) } ) {
192+ match func. invoke_with_args( datafusion_expr:: ScalarFunctionArgs { args: $ARGS, number_rows: cardinality, return_type: & return_type} ) {
175193 Ok ( _) => assert!( false , "expected error" ) ,
176194 Err ( error) => {
177195 assert!( expected_error. strip_backtrace( ) . starts_with( & error. strip_backtrace( ) ) ) ;
0 commit comments