Skip to content

Commit 6247d35

Browse files
committed
fix: spark array return type mismatch when inner data type is LargeList
1 parent db5f47c commit 6247d35

2 files changed

Lines changed: 17 additions & 18 deletions

File tree

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

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ use arrow::array::{
2222
MutableArrayData, NullArray, OffsetSizeTrait,
2323
};
2424
use arrow::buffer::OffsetBuffer;
25-
use arrow::datatypes::{DataType, Field, FieldRef};
25+
use arrow::datatypes::{DataType, Field};
2626
use datafusion_common::utils::SingleRowListArrayBuilder;
2727
use datafusion_common::{plan_datafusion_err, plan_err, Result};
2828
use datafusion_expr::type_coercion::binary::comparison_coercion;
2929
use datafusion_expr::{
30-
ColumnarValue, ReturnFieldArgs, ScalarFunctionArgs, ScalarUDFImpl, Signature,
30+
ColumnarValue,ScalarFunctionArgs, ScalarUDFImpl, Signature,
3131
TypeSignature, Volatility,
3232
};
3333

@@ -92,21 +92,6 @@ impl ScalarUDFImpl for SparkArray {
9292
))))
9393
}
9494

95-
fn return_field_from_args(&self, args: ReturnFieldArgs) -> Result<FieldRef> {
96-
let data_types = args
97-
.arg_fields
98-
.iter()
99-
.map(|f| f.data_type())
100-
.cloned()
101-
.collect::<Vec<_>>();
102-
let return_type = self.return_type(&data_types)?;
103-
Ok(Arc::new(Field::new(
104-
"this_field_name_is_irrelevant",
105-
return_type,
106-
false,
107-
)))
108-
}
109-
11095
fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result<ColumnarValue> {
11196
let ScalarFunctionArgs { args, .. } = args;
11297
make_scalar_function(make_array_inner)(args.as_slice())
@@ -166,7 +151,6 @@ pub fn make_array_inner(arrays: &[ArrayRef]) -> Result<ArrayRef> {
166151
.build_list_array(),
167152
))
168153
}
169-
DataType::LargeList(..) => array_array::<i64>(arrays, data_type),
170154
_ => array_array::<i32>(arrays, data_type),
171155
}
172156
}

datafusion/sqllogictest/test_files/spark/array/array.slt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,18 @@ query ?
7070
SELECT array(array(1,2));
7171
----
7272
[[1, 2]]
73+
74+
query ?
75+
SELECT array(arrow_cast(array(1), 'LargeList(Int64)'));
76+
----
77+
[[1]]
78+
79+
query ?
80+
SELECT array(arrow_cast(array(1), 'LargeList(Int64)'), arrow_cast(array(), 'LargeList(Int64)'));
81+
----
82+
[[1], []]
83+
84+
query ?
85+
SELECT array(arrow_cast(array(1,2), 'LargeList(Int64)'), array(3));
86+
----
87+
[[1, 2], [3]]

0 commit comments

Comments
 (0)