Skip to content

Commit 6857d6d

Browse files
authored
feat: column support for array_dims, array_ndims, cardinality and array_length (apache#6864)
* feat: column support for array_dims, array_ndims, cardinality and array_length * feat: sqllogictests for array_dims, array_ndims, array_length and cardinality * fix: merge main
1 parent ce3a0bb commit 6857d6d

File tree

4 files changed

+254
-263
lines changed

4 files changed

+254
-263
lines changed

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

+70-8
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,19 @@ select cardinality(make_array([1, 2], [3, 4], [5, 6])), cardinality(array_fill(3
505505
query II
506506
select cardinality(make_array()), cardinality(make_array(make_array()))
507507
----
508-
0 0
508+
NULL 0
509+
510+
# cardinality with columns
511+
query III
512+
select cardinality(column1), cardinality(column2), cardinality(column3) from arrays;
513+
----
514+
4 3 5
515+
4 3 5
516+
4 3 5
517+
4 3 3
518+
NULL 3 4
519+
4 NULL 1
520+
4 3 NULL
509521

510522
## trim_array
511523

@@ -565,13 +577,39 @@ select array_length(make_array()), array_length(make_array(), 1), array_length(m
565577
----
566578
0 0 NULL
567579

580+
# array_length with columns
581+
query I
582+
select array_length(column1, column3) from arrays_values;
583+
----
584+
10
585+
NULL
586+
NULL
587+
NULL
588+
NULL
589+
NULL
590+
NULL
591+
NULL
592+
593+
# array_length with columns and scalars
594+
query II
595+
select array_length(array[array[1, 2], array[3, 4]], column3), array_length(column1, 1) from arrays_values;
596+
----
597+
2 10
598+
2 10
599+
NULL 10
600+
NULL 10
601+
NULL NULL
602+
NULL 10
603+
NULL 10
604+
NULL 10
605+
568606
## array_dims
569607

570608
# array_dims scalar function
571-
query error DataFusion error: SQL error: ParserError\("Expected an SQL statement, found: caused"\)
572-
caused by
573-
Error during planning: Cannot automatically convert List\(Field \{ name: "item", data_type: UInt8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: \{\} \}\) to UInt8
609+
query ???
574610
select array_dims(make_array(1, 2, 3)), array_dims(make_array([1, 2], [3, 4])), array_dims(make_array([[[[1], [2]]]]));
611+
----
612+
[3] [2, 2] [1, 1, 1, 2, 1]
575613

576614
# array_dims scalar function #2
577615
query error DataFusion error: SQL error: ParserError\("Expected an SQL statement, found: caused"\)
@@ -580,10 +618,22 @@ Error during planning: Cannot automatically convert List\(Field \{ name: "item",
580618
select array_dims(array_fill(2, [1, 2, 3])), array_dims(array_fill(3, [2, 5, 4]));
581619

582620
# array_dims scalar function #3
583-
query error DataFusion error: SQL error: ParserError\("Expected an SQL statement, found: caused"\)
584-
caused by
585-
Error during planning: Cannot automatically convert List\(Field \{ name: "item", data_type: UInt8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: \{\} \}\) to UInt8
621+
query ??
586622
select array_dims(make_array()), array_dims(make_array(make_array()))
623+
----
624+
NULL [1, 0]
625+
626+
# array_dims with columns
627+
query ???
628+
select array_dims(column1), array_dims(column2), array_dims(column3) from arrays;
629+
----
630+
[2, 2] [3] [5]
631+
[2, 2] [3] [5]
632+
[2, 2] [3] [5]
633+
[2, 2] [3] [3]
634+
NULL [3] [4]
635+
[2, 2] NULL [1]
636+
[2, 2] [3] NULL
587637

588638
## array_ndims
589639

@@ -603,7 +653,19 @@ select array_ndims(array_fill(1, [1, 2, 3])), array_ndims([[[[[[[[[[[[[[[[[[[[[1
603653
query II
604654
select array_ndims(make_array()), array_ndims(make_array(make_array()))
605655
----
606-
1 2
656+
NULL 2
657+
658+
# array_ndims with columns
659+
query III
660+
select array_ndims(column1), array_ndims(column2), array_ndims(column3) from arrays;
661+
----
662+
2 1 1
663+
2 1 1
664+
2 1 1
665+
2 1 1
666+
NULL 1 1
667+
2 NULL 1
668+
2 1 NULL
607669

608670
## array_contains
609671

datafusion/expr/src/built_in_function.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -480,14 +480,16 @@ impl BuiltinScalarFunction {
480480
Ok(List(Arc::new(Field::new("item", expr_type, true))))
481481
}
482482
BuiltinScalarFunction::ArrayContains => Ok(Boolean),
483-
BuiltinScalarFunction::ArrayDims => Ok(UInt8),
483+
BuiltinScalarFunction::ArrayDims => {
484+
Ok(List(Arc::new(Field::new("item", UInt64, true))))
485+
}
484486
BuiltinScalarFunction::ArrayFill => Ok(List(Arc::new(Field::new(
485487
"item",
486488
input_expr_types[1].clone(),
487489
true,
488490
)))),
489-
BuiltinScalarFunction::ArrayLength => Ok(UInt8),
490-
BuiltinScalarFunction::ArrayNdims => Ok(UInt8),
491+
BuiltinScalarFunction::ArrayLength => Ok(UInt64),
492+
BuiltinScalarFunction::ArrayNdims => Ok(UInt64),
491493
BuiltinScalarFunction::ArrayPosition => Ok(UInt64),
492494
BuiltinScalarFunction::ArrayPositions => {
493495
Ok(List(Arc::new(Field::new("item", UInt64, true))))

0 commit comments

Comments
 (0)