@@ -28,7 +28,20 @@ pub mod test {
28
28
let expected: datafusion_common:: Result <Option <$EXPECTED_TYPE>> = $EXPECTED;
29
29
let func = $FUNC;
30
30
31
- let type_array = $ARGS. iter( ) . map( |arg| arg. data_type( ) ) . collect:: <Vec <_>>( ) ;
31
+ let arg_fields_owned = $ARGS
32
+ . iter( )
33
+ . enumerate( )
34
+ . map( |( idx, arg) | {
35
+
36
+ let nullable = match arg {
37
+ datafusion_expr:: ColumnarValue :: Scalar ( scalar) => scalar. is_null( ) ,
38
+ datafusion_expr:: ColumnarValue :: Array ( a) => a. null_count( ) > 0 ,
39
+ } ;
40
+
41
+ arrow:: datatypes:: Field :: new( format!( "arg_{idx}" ) , arg. data_type( ) , nullable)
42
+ } )
43
+ . collect:: <Vec <_>>( ) ;
44
+
32
45
let cardinality = $ARGS
33
46
. iter( )
34
47
. fold( Option :: <usize >:: None , |acc, arg| match arg {
@@ -43,24 +56,18 @@ pub mod test {
43
56
} ) . collect:: <Vec <_>>( ) ;
44
57
let scalar_arguments_refs = scalar_arguments. iter( ) . map( |arg| arg. as_ref( ) ) . collect:: <Vec <_>>( ) ;
45
58
46
- let nullables = $ARGS. iter( ) . map( |arg| match arg {
47
- datafusion_expr:: ColumnarValue :: Scalar ( scalar) => scalar. is_null( ) ,
48
- datafusion_expr:: ColumnarValue :: Array ( a) => a. null_count( ) > 0 ,
49
- } ) . collect:: <Vec <_>>( ) ;
50
59
51
- let return_info = func. return_type_from_args( datafusion_expr:: ReturnTypeArgs {
52
- arg_types: & type_array,
53
- scalar_arguments: & scalar_arguments_refs,
54
- nullables: & nullables
60
+ let return_field = func. return_field_from_args( datafusion_expr:: ReturnFieldArgs {
61
+ arg_fields: & arg_fields_owned,
62
+ scalar_arguments: & scalar_arguments_refs
55
63
} ) ;
56
64
57
65
match expected {
58
66
Ok ( expected) => {
59
- assert_eq!( return_info. is_ok( ) , true ) ;
60
- let ( return_type, _nullable) = return_info. unwrap( ) . into_parts( ) ;
61
- assert_eq!( return_type, $EXPECTED_DATA_TYPE) ;
67
+ let return_field = return_field. unwrap( ) ;
68
+ assert_eq!( return_field. data_type( ) , & $EXPECTED_DATA_TYPE) ;
62
69
63
- let result = func. invoke_with_args( datafusion_expr:: ScalarFunctionArgs { args: $ARGS, number_rows: cardinality, return_type : & return_type } ) ;
70
+ let result = func. invoke_with_args( datafusion_expr:: ScalarFunctionArgs { args: $ARGS, number_rows: cardinality, return_field : & return_field , arg_fields : arg_fields_owned . iter ( ) . collect ( ) } ) ;
64
71
assert_eq!( result. is_ok( ) , true , "function returned an error: {}" , result. unwrap_err( ) ) ;
65
72
66
73
let result = result. unwrap( ) . to_array( cardinality) . expect( "Failed to convert to array" ) ;
@@ -74,17 +81,17 @@ pub mod test {
74
81
} ;
75
82
}
76
83
Err ( expected_error) => {
77
- if return_info . is_err( ) {
78
- match return_info {
84
+ if return_field . is_err( ) {
85
+ match return_field {
79
86
Ok ( _) => assert!( false , "expected error" ) ,
80
87
Err ( error) => { datafusion_common:: assert_contains!( expected_error. strip_backtrace( ) , error. strip_backtrace( ) ) ; }
81
88
}
82
89
}
83
90
else {
84
- let ( return_type , _nullable ) = return_info . unwrap( ) . into_parts ( ) ;
91
+ let return_field = return_field . unwrap( ) ;
85
92
86
93
// invoke is expected error - cannot use .expect_err() due to Debug not being implemented
87
- match func. invoke_with_args( datafusion_expr:: ScalarFunctionArgs { args: $ARGS, number_rows: cardinality, return_type : & return_type } ) {
94
+ match func. invoke_with_args( datafusion_expr:: ScalarFunctionArgs { args: $ARGS, number_rows: cardinality, return_field : & return_field , arg_fields : arg_fields_owned . iter ( ) . collect ( ) } ) {
88
95
Ok ( _) => assert!( false , "expected error" ) ,
89
96
Err ( error) => {
90
97
assert!( expected_error. strip_backtrace( ) . starts_with( & error. strip_backtrace( ) ) ) ;
0 commit comments