Skip to content

Commit 2d066d7

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

File tree

1 file changed

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

1 file changed

+16
-3
lines changed

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

Lines changed: 16 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,10 @@ 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+
let is_null_input = check_null_types(&func_args.args[0]);
101+
if is_null_input.is_some() {
102+
return Ok(is_null_input.unwrap());
103+
}
101104
}
102105

103106
let array_len = func_args
@@ -134,6 +137,16 @@ impl ScalarUDFImpl for SparkSlice {
134137
}
135138
}
136139

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

@@ -210,6 +223,6 @@ mod tests {
210223
};
211224
let slice = SparkSlice::new();
212225
let result = slice.invoke_with_args(args).unwrap();
213-
assert_eq!(result.to_array(1).unwrap(), Arc::new(NullArray::new(1)));
226+
assert_eq!(*result.to_array(1).unwrap(), *Arc::new(NullArray::new(1)));
214227
}
215228
}

0 commit comments

Comments
 (0)