Skip to content

Commit 5907c21

Browse files
authored
fix: array_concat with arrays with different dimensions, add _list* aliases for _array* functions (#7008)
* fix: array_concat with arrays with different dimensions does not work properly * fix: cargo doc * fix: array_concat does not work with nested empty arrays * fix: some comments
1 parent 27d6815 commit 5907c21

File tree

5 files changed

+550
-71
lines changed

5 files changed

+550
-71
lines changed

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

Lines changed: 174 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ select column1, column2, column3 from arrays_values_without_nulls;
163163
### Array function tests
164164

165165

166-
## make_array
166+
## make_array (aliases: `make_list`)
167167

168168
# make_array scalar function #1
169169
query ???
@@ -207,6 +207,12 @@ select make_array(make_array()), make_array(make_array(make_array()))
207207
----
208208
[[]] [[[]]]
209209

210+
# make_list scalar function #8 (function alias: `make_array`)
211+
query ???
212+
select make_list(1, 2, 3), make_list(1.0, 2.0, 3.0), make_list('h', 'e', 'l', 'l', 'o');
213+
----
214+
[1, 2, 3] [1.0, 2.0, 3.0] [h, e, l, l, o]
215+
210216
# make_array scalar function with nulls
211217
query ???
212218
select make_array(1, NULL, 3), make_array(NULL, 2.0, NULL), make_array('h', NULL, 'l', NULL, 'o');
@@ -286,9 +292,9 @@ from values;
286292

287293

288294

289-
## array_append
295+
## array_append (aliases: `list_append`, `array_push_back`, `list_push_back`)
290296

291-
# array_append scalar function #2
297+
# array_append scalar function #1
292298
query ?
293299
select array_append(make_array(), 4);
294300
----
@@ -312,6 +318,24 @@ select array_append(make_array([1], [2], [3]), make_array(4)), array_append(make
312318
----
313319
[[1], [2], [3], [4]] [[1.0], [2.0], [3.0], [4.0]] [[h], [e], [l], [l], [o]]
314320

321+
# list_append scalar function #5 (function alias `array_append`)
322+
query ???
323+
select list_append(make_array(1, 2, 3), 4), list_append(make_array(1.0, 2.0, 3.0), 4.0), list_append(make_array('h', 'e', 'l', 'l'), 'o');
324+
----
325+
[1, 2, 3, 4] [1.0, 2.0, 3.0, 4.0] [h, e, l, l, o]
326+
327+
# array_push_back scalar function #6 (function alias `array_append`)
328+
query ???
329+
select array_push_back(make_array(1, 2, 3), 4), array_push_back(make_array(1.0, 2.0, 3.0), 4.0), array_push_back(make_array('h', 'e', 'l', 'l'), 'o');
330+
----
331+
[1, 2, 3, 4] [1.0, 2.0, 3.0, 4.0] [h, e, l, l, o]
332+
333+
# list_push_back scalar function #7 (function alias `array_append`)
334+
query ???
335+
select list_push_back(make_array(1, 2, 3), 4), list_push_back(make_array(1.0, 2.0, 3.0), 4.0), list_push_back(make_array('h', 'e', 'l', 'l'), 'o');
336+
----
337+
[1, 2, 3, 4] [1.0, 2.0, 3.0, 4.0] [h, e, l, l, o]
338+
315339
# array_append with columns #1
316340
query ?
317341
select array_append(column1, column2) from arrays_values;
@@ -351,7 +375,7 @@ select array_append(column1, make_array(1, 11, 111)), array_append(make_array(ma
351375
[[1, 2, 3], [2, 9, 1], [7, 8, 9], [1, 2, 3], [1, 7, 4], [4, 5, 6], [1, 11, 111]] [[1, 2, 3], [11, 12, 13], [7, 8, 9]]
352376
[[4, 5, 6], [10, 11, 12], [4, 9, 8], [7, 8, 9], [10, 11, 12], [1, 8, 7], [1, 11, 111]] [[1, 2, 3], [11, 12, 13], [10, 11, 12]]
353377

354-
## array_prepend
378+
## array_prepend (aliases: `list_prepend`, `array_push_front`, `list_push_front`)
355379

356380
# array_prepend scalar function #1
357381
query ?
@@ -377,6 +401,24 @@ select array_prepend(make_array(1), make_array(make_array(2), make_array(3), mak
377401
----
378402
[[1], [2], [3], [4]] [[1.0], [2.0], [3.0], [4.0]] [[h], [e], [l], [l], [o]]
379403

404+
# list_prepend scalar function #5 (function alias `array_prepend`)
405+
query ???
406+
select list_prepend(1, make_array(2, 3, 4)), list_prepend(1.0, make_array(2.0, 3.0, 4.0)), list_prepend('h', make_array('e', 'l', 'l', 'o'));
407+
----
408+
[1, 2, 3, 4] [1.0, 2.0, 3.0, 4.0] [h, e, l, l, o]
409+
410+
# array_push_front scalar function #6 (function alias `array_prepend`)
411+
query ???
412+
select array_push_front(1, make_array(2, 3, 4)), array_push_front(1.0, make_array(2.0, 3.0, 4.0)), array_push_front('h', make_array('e', 'l', 'l', 'o'));
413+
----
414+
[1, 2, 3, 4] [1.0, 2.0, 3.0, 4.0] [h, e, l, l, o]
415+
416+
# list_push_front scalar function #7 (function alias `array_prepend`)
417+
query ???
418+
select list_push_front(1, make_array(2, 3, 4)), list_push_front(1.0, make_array(2.0, 3.0, 4.0)), list_push_front('h', make_array('e', 'l', 'l', 'o'));
419+
----
420+
[1, 2, 3, 4] [1.0, 2.0, 3.0, 4.0] [h, e, l, l, o]
421+
380422
# array_prepend with columns #1
381423
query ?
382424
select array_prepend(column2, column1) from arrays_values;
@@ -436,7 +478,7 @@ select array_fill(1, make_array())
436478
----
437479
[]
438480

439-
## array_concat
481+
## array_concat (aliases: `array_cat`, `list_concat`, `list_cat`)
440482

441483
# array_concat scalar function #1
442484
query ??
@@ -474,30 +516,78 @@ select array_concat(make_array(), make_array(2, 3));
474516
----
475517
[2, 3]
476518

519+
# array_concat scalar function #7 (with empty arrays)
520+
query ?
521+
select array_concat(make_array(make_array(1, 2), make_array(3, 4)), make_array(make_array()));
522+
----
523+
[[1, 2], [3, 4]]
524+
525+
# array_concat scalar function #8 (with empty arrays)
526+
query ?
527+
select array_concat(make_array(make_array(1, 2), make_array(3, 4)), make_array(make_array()), make_array(make_array(), make_array()), make_array(make_array(5, 6), make_array(7, 8)));
528+
----
529+
[[1, 2], [3, 4], [5, 6], [7, 8]]
530+
531+
# array_concat scalar function #9 (with empty arrays)
532+
query ?
533+
select array_concat(make_array(make_array()), make_array(make_array(1, 2), make_array(3, 4)));
534+
----
535+
[[1, 2], [3, 4]]
536+
537+
# array_cat scalar function #10 (function alias `array_concat`)
538+
query ??
539+
select array_cat(make_array(1, 2, 3), make_array(4, 5, 6), make_array(7, 8, 9)), array_cat(make_array([1], [2]), make_array([3], [4]));
540+
----
541+
[1, 2, 3, 4, 5, 6, 7, 8, 9] [[1], [2], [3], [4]]
542+
543+
# list_concat scalar function #11 (function alias `array_concat`)
544+
query ??
545+
select list_concat(make_array(1, 2, 3), make_array(4, 5, 6), make_array(7, 8, 9)), list_concat(make_array([1], [2]), make_array([3], [4]));
546+
----
547+
[1, 2, 3, 4, 5, 6, 7, 8, 9] [[1], [2], [3], [4]]
548+
549+
# list_cat scalar function #12 (function alias `array_concat`)
550+
query ??
551+
select list_cat(make_array(1, 2, 3), make_array(4, 5, 6), make_array(7, 8, 9)), list_cat(make_array([1], [2]), make_array([3], [4]));
552+
----
553+
[1, 2, 3, 4, 5, 6, 7, 8, 9] [[1], [2], [3], [4]]
554+
477555
# array_concat with different dimensions #1 (2D + 1D)
478556
query ?
479-
select array_concat(make_array([1,2], [3,4]), make_array(5, 6))
557+
select array_concat(make_array([1,2], [3,4]), make_array(5, 6));
480558
----
481559
[[1, 2], [3, 4], [5, 6]]
482560

483561
# array_concat with different dimensions #2 (1D + 2D)
484562
query ?
485-
select array_concat(make_array(5, 6), make_array([1,2], [3,4]))
563+
select array_concat(make_array(5, 6), make_array([1,2], [3,4]));
486564
----
487565
[[5, 6], [1, 2], [3, 4]]
488566

489567
# array_concat with different dimensions #3 (2D + 1D + 1D)
490568
query ?
491-
select array_concat(make_array([1,2], [3,4]), make_array(5, 6), make_array(7,8))
569+
select array_concat(make_array([1,2], [3,4]), make_array(5, 6), make_array(7,8));
492570
----
493571
[[1, 2], [3, 4], [5, 6], [7, 8]]
494572

495573
# array_concat with different dimensions #4 (1D + 2D + 3D)
496574
query ?
497-
select array_concat(make_array(10, 20), make_array([30, 40]), make_array([[50, 60]]))
575+
select array_concat(make_array(10, 20), make_array([30, 40]), make_array([[50, 60]]));
498576
----
499577
[[[10, 20]], [[30, 40]], [[50, 60]]]
500578

579+
# array_concat with different dimensions #5 (2D + 1D + 3D)
580+
query ?
581+
select array_concat(make_array([30, 40]), make_array(10, 20), make_array([[50, 60]]));
582+
----
583+
[[[30, 40]], [[10, 20]], [[50, 60]]]
584+
585+
# array_concat with different dimensions #6 (2D + 1D + 3D + 4D + 3D)
586+
query ?
587+
select array_concat(make_array([30, 40]), make_array(10, 20), make_array([[50, 60]]), make_array([[[70, 80]]]), make_array([[80, 40]]));
588+
----
589+
[[[[30, 40]]], [[[10, 20]]], [[[50, 60]]], [[[70, 80]]], [[[80, 40]]]]
590+
501591
# array_concat column-wise #1
502592
query ?
503593
select array_concat(column1, make_array(0)) from arrays_values_without_nulls;
@@ -635,7 +725,7 @@ select array_concat(make_array(column3), column1, column2) from arrays_values_v2
635725
[, 11, 12]
636726
[]
637727

638-
## array_position
728+
## array_position (aliases: `list_position`, `array_indexof`, `list_indexof`)
639729

640730
# array_position scalar function #1
641731
query III
@@ -661,6 +751,24 @@ select array_position(make_array([1, 2, 3], [4, 5, 6], [5, 5, 5], [4, 5, 6], [7,
661751
----
662752
4 3
663753

754+
# list_position scalar function #5 (function alias `array_position`)
755+
query III
756+
select list_position(['h', 'e', 'l', 'l', 'o'], 'l'), list_position([1, 2, 3, 4, 5], 5), list_position([1, 1, 1], 1);
757+
----
758+
3 5 1
759+
760+
# array_indexof scalar function #6 (function alias `array_position`)
761+
query III
762+
select array_indexof(['h', 'e', 'l', 'l', 'o'], 'l'), array_indexof([1, 2, 3, 4, 5], 5), array_indexof([1, 1, 1], 1);
763+
----
764+
3 5 1
765+
766+
# list_indexof scalar function #7 (function alias `array_position`)
767+
query III
768+
select list_indexof(['h', 'e', 'l', 'l', 'o'], 'l'), list_indexof([1, 2, 3, 4, 5], 5), list_indexof([1, 1, 1], 1);
769+
----
770+
3 5 1
771+
664772
# array_position with columns #1
665773
query II
666774
select array_position(column1, column2), array_position(column1, column2, column3) from arrays_values_without_nulls;
@@ -693,20 +801,26 @@ select array_position(make_array([1, 2, 3], [4, 5, 6], [11, 12, 13]), column2),
693801
NULL 6 4
694802
NULL 1 NULL
695803

696-
## array_positions
804+
## array_positions (aliases: `list_positions`)
697805

698806
# array_positions scalar function #1
699807
query ???
700808
select array_positions(['h', 'e', 'l', 'l', 'o'], 'l'), array_positions([1, 2, 3, 4, 5], 5), array_positions([1, 1, 1], 1);
701809
----
702810
[3, 4] [5] [1, 2, 3]
703811

704-
# array_positions scalar function #2
812+
# array_positions scalar function #2 (element is list)
705813
query ?
706814
select array_positions(make_array([1, 2, 3], [2, 1, 3], [1, 5, 6], [2, 1, 3], [4, 5, 6]), [2, 1, 3]);
707815
----
708816
[2, 4]
709817

818+
# list_positions scalar function #3 (function alias `array_positions`)
819+
query ???
820+
select list_positions(['h', 'e', 'l', 'l', 'o'], 'l'), list_positions([1, 2, 3, 4, 5], 5), list_positions([1, 1, 1], 1);
821+
----
822+
[3, 4] [5] [1, 2, 3]
823+
710824
# array_positions with columns #1
711825
query ?
712826
select array_positions(column1, column2) from arrays_values_without_nulls;
@@ -747,9 +861,9 @@ select array_replace(make_array(1, 2, 3, 4), 2, 3), array_replace(make_array(1,
747861
----
748862
[1, 3, 3, 4] [1, 0, 0, 5, 0, 6, 7] [1, 2, 3]
749863

750-
## array_to_string
864+
## array_to_string (aliases: `list_to_string`, `array_join`, `list_join`)
751865

752-
# array_to_string scalar function
866+
# array_to_string scalar function #1
753867
query TTT
754868
select array_to_string(['h', 'e', 'l', 'l', 'o'], ','), array_to_string([1, 2, 3, 4, 5], '-'), array_to_string([1.0, 2.0, 3.0], '|');
755869
----
@@ -767,6 +881,24 @@ select array_to_string(make_array(), ',')
767881
----
768882
(empty)
769883

884+
# list_to_string scalar function #4 (function alias `array_to_string`)
885+
query TTT
886+
select list_to_string(['h', 'e', 'l', 'l', 'o'], ','), list_to_string([1, 2, 3, 4, 5], '-'), list_to_string([1.0, 2.0, 3.0], '|');
887+
----
888+
h,e,l,l,o 1-2-3-4-5 1|2|3
889+
890+
# array_join scalar function #5 (function alias `array_to_string`)
891+
query TTT
892+
select array_join(['h', 'e', 'l', 'l', 'o'], ','), array_join([1, 2, 3, 4, 5], '-'), array_join([1.0, 2.0, 3.0], '|');
893+
----
894+
h,e,l,l,o 1-2-3-4-5 1|2|3
895+
896+
# list_join scalar function #6 (function alias `list_join`)
897+
query TTT
898+
select list_join(['h', 'e', 'l', 'l', 'o'], ','), list_join([1, 2, 3, 4, 5], '-'), list_join([1.0, 2.0, 3.0], '|');
899+
----
900+
h,e,l,l,o 1-2-3-4-5 1|2|3
901+
770902
# array_to_string scalar function with nulls #1
771903
query TTT
772904
select array_to_string(make_array('h', NULL, 'l', NULL, 'o'), ','), array_to_string(make_array(1, NULL, 3, NULL, 5), '-'), array_to_string(make_array(NULL, 2.0, 3.0), '|');
@@ -887,9 +1019,9 @@ select trim_array(make_array(), 0), trim_array(make_array(), 1)
8871019
----
8881020
[] []
8891021

890-
## array_length
1022+
## array_length (aliases: `list_length`)
8911023

892-
# array_length scalar function
1024+
# array_length scalar function #1
8931025
query III
8941026
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]));
8951027
----
@@ -919,6 +1051,12 @@ select array_length(make_array()), array_length(make_array(), 1), array_length(m
9191051
----
9201052
0 0 NULL
9211053

1054+
# list_length scalar function #6 (function alias `array_length`)
1055+
query III
1056+
select list_length(make_array(1, 2, 3, 4, 5)), list_length(make_array(1, 2, 3)), list_length(make_array([1, 2], [3, 4], [5, 6]));
1057+
----
1058+
5 3 3
1059+
9221060
# array_length with columns
9231061
query I
9241062
select array_length(column1, column3) from arrays_values;
@@ -945,7 +1083,7 @@ NULL 10
9451083
NULL 10
9461084
NULL 10
9471085

948-
## array_dims
1086+
## array_dims (aliases: `list_dims`)
9491087

9501088
# array_dims scalar function
9511089
query ???
@@ -965,6 +1103,12 @@ select array_dims(make_array()), array_dims(make_array(make_array()))
9651103
----
9661104
NULL [1, 0]
9671105

1106+
# list_dims scalar function #4 (function alias `array_dims`)
1107+
query ???
1108+
select list_dims(make_array(1, 2, 3)), list_dims(make_array([1, 2], [3, 4])), list_dims(make_array([[[[1], [2]]]]));
1109+
----
1110+
[3] [2, 2] [1, 1, 1, 2, 1]
1111+
9681112
# array_dims with columns
9691113
query ???
9701114
select array_dims(column1), array_dims(column2), array_dims(column3) from arrays;
@@ -977,9 +1121,9 @@ NULL [3] [4]
9771121
[2, 2] NULL [1]
9781122
[2, 2] [3] NULL
9791123

980-
## array_ndims
1124+
## array_ndims (aliases: `list_ndims`)
9811125

982-
# array_ndims scalar function
1126+
# array_ndims scalar function #1
9831127
query III
9841128
select array_ndims(make_array(1, 2, 3)), array_ndims(make_array([1, 2], [3, 4])), array_ndims(make_array([[[[1], [2]]]]));
9851129
----
@@ -997,6 +1141,17 @@ select array_ndims(make_array()), array_ndims(make_array(make_array()))
9971141
----
9981142
NULL 2
9991143

1144+
# list_ndims scalar function #4 (function alias `array_ndims`)
1145+
query III
1146+
select list_ndims(make_array(1, 2, 3)), list_ndims(make_array([1, 2], [3, 4])), list_ndims(make_array([[[[1], [2]]]]));
1147+
----
1148+
1 2 5
1149+
1150+
query II
1151+
select array_ndims(make_array()), array_ndims(make_array(make_array()))
1152+
----
1153+
NULL 2
1154+
10001155
# array_ndims with columns
10011156
query III
10021157
select array_ndims(column1), array_ndims(column2), array_ndims(column3) from arrays;

0 commit comments

Comments
 (0)