|
15 | 15 | // specific language governing permissions and limitations |
16 | 16 | // under the License. |
17 | 17 |
|
18 | | -use arrow::array::{Array, ArrayData, ArrayRef, Int64Builder, ListArray}; |
| 18 | +use arrow::array::{Array, ArrayRef, Int64Builder}; |
19 | 19 | use arrow::datatypes::{DataType, Field, FieldRef}; |
20 | 20 | use datafusion_common::cast::{as_int64_array, as_list_array}; |
21 | 21 | use datafusion_common::utils::ListCoercion; |
22 | | -use datafusion_common::{Result, exec_err, internal_err, utils::take_function_args}; |
| 22 | +use datafusion_common::{ |
| 23 | + Result, ScalarValue, exec_err, internal_err, utils::take_function_args, |
| 24 | +}; |
23 | 25 | use datafusion_expr::{ |
24 | 26 | ArrayFunctionArgument, ArrayFunctionSignature, ColumnarValue, ReturnFieldArgs, |
25 | 27 | ScalarFunctionArgs, ScalarUDFImpl, Signature, TypeSignature, Volatility, |
@@ -93,11 +95,11 @@ impl ScalarUDFImpl for SparkSlice { |
93 | 95 | mut func_args: ScalarFunctionArgs, |
94 | 96 | ) -> Result<ColumnarValue> { |
95 | 97 | if func_args.args[0].data_type() == DataType::Null { |
96 | | - let len = match &func_args.args[0] { |
97 | | - ColumnarValue::Array(a) => a.len(), |
98 | | - ColumnarValue::Scalar(_) => func_args.number_rows, |
99 | | - }; |
100 | | - return Ok(ColumnarValue::Array(list_null_array(len))); |
| 98 | + return Ok(ColumnarValue::Scalar(ScalarValue::new_null_list( |
| 99 | + DataType::Null, |
| 100 | + true, |
| 101 | + 1, |
| 102 | + ))); |
101 | 103 | } |
102 | 104 |
|
103 | 105 | let array_len = func_args |
@@ -134,11 +136,6 @@ impl ScalarUDFImpl for SparkSlice { |
134 | 136 | } |
135 | 137 | } |
136 | 138 |
|
137 | | -fn list_null_array(len: usize) -> ArrayRef { |
138 | | - let list_type = DataType::List(Arc::new(Field::new_list_field(DataType::Null, true))); |
139 | | - Arc::new(ListArray::from(ArrayData::new_null(&list_type, len))) |
140 | | -} |
141 | | - |
142 | 139 | fn calculate_start_end(args: &[ArrayRef]) -> Result<(ArrayRef, ArrayRef)> { |
143 | 140 | let [values, start, length] = take_function_args("slice", args)?; |
144 | 141 |
|
|
0 commit comments