Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion datafusion/functions-nested/src/length.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,9 @@ fn compute_array_length(

loop {
if current_dimension == dimension {
return Ok(Some(value.len() as u64));
// PostgreSQL: array_length(anyarray, dimension) returns NULL when that
// dimension is empty (`array_length('{}'::int[], 1)`), not zero.
return Ok((!value.is_empty()).then(|| value.len() as u64));
}

match value.data_type() {
Expand Down
9 changes: 7 additions & 2 deletions datafusion/sqllogictest/test_files/array/array_length.slt
Comment thread
raushanprabhakar1 marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,16 @@ select array_length(arrow_cast(array_repeat(array_repeat(array_repeat(3, 5), 2),
----
3 2

# array_length scalar function #5
# array_length scalar function #5 empty array dimension (PostgreSQL-compatible)
query III
select array_length(make_array()), array_length(make_array(), 1), array_length(make_array(), 2)
----
0 0 NULL
NULL NULL NULL

query I
SELECT array_length(ARRAY[]::INT[], 1)
----
NULL

# array_length scalar function #6 nested array
query III
Expand Down
Loading