Skip to content

Commit d0ab003

Browse files
authored
test: change test_function macro to use return_type_from_args instead of return_type (#14852)
1 parent aadb0b6 commit d0ab003

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

datafusion/functions/src/utils.rs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)