Skip to content

Commit f5534ca

Browse files
committed
update
1 parent 3c69fc5 commit f5534ca

File tree

2 files changed

+61
-8
lines changed

2 files changed

+61
-8
lines changed

datafusion/core/tests/sqllogictests/test_files/array.slt

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ select make_array()
5656
[]
5757

5858
# array scalar function #7
59-
query ? rowsort
60-
select make_array(make_array())
59+
query ?? rowsort
60+
select make_array(make_array()), make_array(make_array(make_array()))
6161
----
62-
[[]]
62+
[[]] [[[]]]
6363

6464
# array_append scalar function #1
6565
query ? rowsort
@@ -109,6 +109,12 @@ select array_fill(1, make_array(1, 1, 1)), array_fill(2, make_array(2, 2, 2, 2,
109109
----
110110
[[[1]]] [[[[[2, 2], [2, 2]], [[2, 2], [2, 2]]], [[[2, 2], [2, 2]], [[2, 2], [2, 2]]]], [[[[2, 2], [2, 2]], [[2, 2], [2, 2]]], [[[2, 2], [2, 2]], [[2, 2], [2, 2]]]]]
111111

112+
# array_fill scalar function #3
113+
query ?
114+
select array_fill(1, make_array())
115+
----
116+
[]
117+
112118
# array_concat scalar function #1
113119
query ?? rowsort
114120
select array_concat(make_array(1, 2, 3), make_array(4, 5, 6), make_array(7, 8, 9)), array_concat(make_array([1], [2]), make_array([3], [4]));
@@ -133,13 +139,13 @@ select array_concat(make_array([[1]]), make_array([[2]]));
133139
----
134140
[[[1]], [[2]]]
135141

136-
# array_concat scalar function #6
142+
# array_concat scalar function #5
137143
query ? rowsort
138144
select array_concat(make_array(2, 3), make_array());
139145
----
140146
[2, 3]
141147

142-
# array_concat scalar function #5
148+
# array_concat scalar function #6
143149
query ? rowsort
144150
select array_concat(make_array(), make_array(2, 3));
145151
----
@@ -181,6 +187,12 @@ select array_to_string([1, 1, 1], '1'), array_to_string([[1, 2], [3, 4], [5, 6]]
181187
----
182188
11111 1+2+3+4+5+6 3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3
183189

190+
# array_to_string scalar function #3
191+
query ?
192+
select array_to_string(make_array(), ',')
193+
----
194+
(empty)
195+
184196
# cardinality scalar function
185197
query III
186198
select cardinality(make_array(1, 2, 3, 4, 5)), cardinality([1, 3, 5]), cardinality(make_array('h', 'e', 'l', 'l', 'o'));
@@ -193,7 +205,13 @@ select cardinality(make_array([1, 2], [3, 4], [5, 6])), cardinality(array_fill(3
193205
----
194206
6 18
195207

196-
# trim_array scalar function
208+
# cardinality scalar function #3
209+
query II
210+
select cardinality(make_array()), cardinality(make_array(make_array()))
211+
----
212+
0 0
213+
214+
# trim_array scalar function #1
197215
query ???
198216
select trim_array(make_array(1, 2, 3, 4, 5), 2), trim_array(['h', 'e', 'l', 'l', 'o'], 3), trim_array([1.0, 2.0, 3.0], 2);
199217
----
@@ -211,6 +229,12 @@ select array_concat(trim_array(make_array(1, 2, 3), 3), make_array(4, 5), make_a
211229
----
212230
[4, 5]
213231

232+
# trim_array scalar function #3
233+
query ??
234+
select trim_array(make_array(), 0), trim_array(make_array(), 1)
235+
----
236+
[] []
237+
214238
# array_length scalar function
215239
query III rowsort
216240
select array_length(make_array(1, 2, 3, 4, 5)), array_length(make_array(1, 2, 3)), array_length(make_array([1, 2], [3, 4], [5, 6]));
@@ -235,6 +259,12 @@ select array_length(array_fill(3, [3, 2, 5]), 1), array_length(array_fill(3, [3,
235259
----
236260
3 2 5 NULL
237261

262+
# array_length scalar function #5
263+
query III rowsort
264+
select array_length(make_array()), array_length(make_array(), 1), array_length(make_array(), 2)
265+
----
266+
0 0 NULL
267+
238268
# array_dims scalar function
239269
query III rowsort
240270
select array_dims(make_array(1, 2, 3)), array_dims(make_array([1, 2], [3, 4])), array_dims(make_array([[[[1], [2]]]]));
@@ -247,6 +277,12 @@ select array_dims(array_fill(2, [1, 2, 3])), array_dims(array_fill(3, [2, 5, 4])
247277
----
248278
[1, 2, 3] [2, 5, 4]
249279

280+
# array_dims scalar function #3
281+
query II rowsort
282+
select array_dims(make_array()), array_dims(make_array(make_array()))
283+
----
284+
[0] [1, 0]
285+
250286
# array_ndims scalar function
251287
query III rowsort
252288
select array_ndims(make_array(1, 2, 3)), array_ndims(make_array([1, 2], [3, 4])), array_ndims(make_array([[[[1], [2]]]]));
@@ -258,3 +294,9 @@ query II rowsort
258294
select array_ndims(array_fill(1, [1, 2, 3])), array_ndims([[[[[[[[[[[[[[[[[[[[[1]]]]]]]]]]]]]]]]]]]]]);
259295
----
260296
3 21
297+
298+
# array_ndims scalar function #3
299+
query II rowsort
300+
select array_ndims(make_array()), array_ndims(make_array(make_array()))
301+
----
302+
1 2

datafusion/physical-expr/src/array_expressions.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,11 @@ pub fn array_fill(args: &[ColumnarValue]) -> Result<ColumnarValue> {
425425
DataType::UInt16 => fill!(array_values, element, UInt16Array),
426426
DataType::UInt32 => fill!(array_values, element, UInt32Array),
427427
DataType::UInt64 => fill!(array_values, element, UInt64Array),
428+
DataType::Null => {
429+
return Ok(datafusion_expr::ColumnarValue::Scalar(
430+
ScalarValue::new_list(Some(vec![]), DataType::Null),
431+
))
432+
}
428433
data_type => {
429434
return Err(DataFusionError::Internal(format!(
430435
"Array_fill is not implemented for type '{data_type:?}'."
@@ -838,6 +843,7 @@ pub fn array_to_string(args: &[ColumnarValue]) -> Result<ColumnarValue> {
838843
DataType::UInt16 => to_string!(arg, arr, &delimeter, UInt16Array),
839844
DataType::UInt32 => to_string!(arg, arr, &delimeter, UInt32Array),
840845
DataType::UInt64 => to_string!(arg, arr, &delimeter, UInt64Array),
846+
DataType::Null => Ok(arg),
841847
data_type => Err(DataFusionError::NotImplemented(format!(
842848
"Array is not implemented for type '{data_type:?}'."
843849
))),
@@ -846,8 +852,13 @@ pub fn array_to_string(args: &[ColumnarValue]) -> Result<ColumnarValue> {
846852

847853
let mut arg = String::from("");
848854
let mut res = compute_array_to_string(&mut arg, arr, delimeter.clone())?.clone();
849-
res.truncate(res.len() - delimeter.len());
850-
Ok(ColumnarValue::Scalar(ScalarValue::Utf8(Some(res))))
855+
match res.as_str() {
856+
"" => Ok(ColumnarValue::Scalar(ScalarValue::Utf8(Some(res)))),
857+
_ => {
858+
res.truncate(res.len() - delimeter.len());
859+
Ok(ColumnarValue::Scalar(ScalarValue::Utf8(Some(res))))
860+
}
861+
}
851862
}
852863

853864
/// Trim_array SQL function

0 commit comments

Comments
 (0)