Skip to content

Commit f8cb205

Browse files
Return NullArray instead of Scalar Null value
1 parent e77beaa commit f8cb205

File tree

1 file changed

+15
-3
lines changed
  • datafusion/spark/src/function/array

1 file changed

+15
-3
lines changed

datafusion/spark/src/function/array/slice.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use arrow::datatypes::{DataType, Field, FieldRef};
2020
use datafusion_common::cast::{as_int64_array, as_list_array};
2121
use datafusion_common::utils::ListCoercion;
2222
use datafusion_common::{
23-
DataFusionError, Result, exec_err, internal_err, utils::take_function_args,
23+
Result, ScalarValue, exec_err, internal_err, utils::take_function_args,
2424
};
2525
use datafusion_expr::{
2626
ArrayFunctionArgument, ArrayFunctionSignature, ColumnarValue, ReturnFieldArgs,
@@ -97,7 +97,9 @@ impl ScalarUDFImpl for SparkSlice {
9797
mut func_args: ScalarFunctionArgs,
9898
) -> Result<ColumnarValue> {
9999
if func_args.args[0].data_type() == DataType::Null {
100-
return Ok(func_args.args[0].clone());
100+
if let Some(result) = check_null_types(&func_args.args[0]) {
101+
return Ok(result);
102+
}
101103
}
102104

103105
let array_len = func_args
@@ -134,6 +136,16 @@ impl ScalarUDFImpl for SparkSlice {
134136
}
135137
}
136138

139+
fn check_null_types(cv: &ColumnarValue) -> Option<ColumnarValue> {
140+
match cv {
141+
ColumnarValue::Scalar(ScalarValue::Null) => {
142+
Some(ColumnarValue::create_null_array(1))
143+
}
144+
ColumnarValue::Array(_) => Some(cv.clone()),
145+
_ => None,
146+
}
147+
}
148+
137149
fn calculate_start_end(args: &[ArrayRef]) -> Result<(ArrayRef, ArrayRef)> {
138150
let [values, start, length] = take_function_args("slice", args)?;
139151

@@ -210,6 +222,6 @@ mod tests {
210222
};
211223
let slice = SparkSlice::new();
212224
let result = slice.invoke_with_args(args).unwrap();
213-
assert_eq!(result.to_array(1).unwrap(), Arc::new(NullArray::new(1)));
225+
assert_eq!(*result.to_array(1).unwrap(), *Arc::new(NullArray::new(1)));
214226
}
215227
}

0 commit comments

Comments
 (0)