Skip to content

Commit 2fc0ed0

Browse files
Return NullArray instead of Scalar Null value
1 parent 31f1e16 commit 2fc0ed0

1 file changed

Lines changed: 16 additions & 4 deletions

File tree

  • datafusion/spark/src/function/array

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

Lines changed: 16 additions & 4 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,
@@ -91,8 +91,10 @@ impl ScalarUDFImpl for SparkSlice {
9191
&self,
9292
mut func_args: ScalarFunctionArgs,
9393
) -> Result<ColumnarValue> {
94-
if func_args.args[0].data_type() == DataType::Null {
95-
return Ok(func_args.args[0].clone());
94+
if func_args.args[0].data_type() == DataType::Null
95+
&& let Some(result) = check_null_types(&func_args.args[0])
96+
{
97+
return Ok(result);
9698
}
9799

98100
let array_len = func_args
@@ -129,6 +131,16 @@ impl ScalarUDFImpl for SparkSlice {
129131
}
130132
}
131133

134+
fn check_null_types(cv: &ColumnarValue) -> Option<ColumnarValue> {
135+
match cv {
136+
ColumnarValue::Scalar(ScalarValue::Null) => {
137+
Some(ColumnarValue::create_null_array(1))
138+
}
139+
ColumnarValue::Array(_) => Some(cv.clone()),
140+
_ => None,
141+
}
142+
}
143+
132144
fn calculate_start_end(args: &[ArrayRef]) -> Result<(ArrayRef, ArrayRef)> {
133145
let [values, start, length] = take_function_args("slice", args)?;
134146

@@ -205,6 +217,6 @@ mod tests {
205217
};
206218
let slice = SparkSlice::new();
207219
let result = slice.invoke_with_args(args).unwrap();
208-
assert_eq!(result.to_array(1).unwrap(), Arc::new(NullArray::new(1)));
220+
assert_eq!(*result.to_array(1).unwrap(), *Arc::new(NullArray::new(1)));
209221
}
210222
}

0 commit comments

Comments
 (0)