Skip to content

Commit f5388f7

Browse files
authored
Fix null input in map_keys/values (#14401)
* null map keys/values * fix test * move test to slt
1 parent d857563 commit f5388f7

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

datafusion/functions-nested/src/map_keys.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,6 @@ fn map_keys_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
129129
Arc::new(Field::new_list_field(map_array.key_type().clone(), false)),
130130
map_array.offsets().clone(),
131131
Arc::clone(map_array.keys()),
132-
None,
132+
map_array.nulls().cloned(),
133133
)))
134134
}

datafusion/functions-nested/src/map_values.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,6 @@ fn map_values_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
129129
Arc::new(Field::new_list_field(map_array.value_type().clone(), true)),
130130
map_array.offsets().clone(),
131131
Arc::clone(map_array.values()),
132-
None,
132+
map_array.nulls().cloned(),
133133
)))
134134
}

datafusion/sqllogictest/test_files/map.slt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ AS VALUES
2323
(MAP {7: [1, NULL, 3], 8: [9, NULL, 6], 9: [7, 8, 9]}, 4, 4.0, '4')
2424
;
2525

26+
statement ok
27+
INSERT INTO map_array_table_1 VALUES (NULL, 2, 1.0, '3');
28+
2629
statement ok
2730
CREATE TABLE map_array_table_2
2831
AS VALUES
@@ -198,7 +201,7 @@ query error DataFusion error: Execution error: map key cannot be null
198201
SELECT MAP(['POST', 'HEAD', null], [41, 33, 30]);
199202

200203
statement error DataFusion error: Execution error: map key cannot be null
201-
CREATE TABLE duplicated_keys_table
204+
CREATE TABLE duplicated_keys_table
202205
AS VALUES
203206
(MAP {1: [1, NULL, 3], NULL: [4, NULL, 6]});
204207

@@ -214,7 +217,7 @@ query error DataFusion error: Execution error: map key must be unique, duplicate
214217
SELECT make_map('POST', 41, 'HEAD', 33, 'POST', 30);
215218

216219
statement error DataFusion error: Execution error: map key must be unique, duplicate key found: 1
217-
CREATE TABLE duplicated_keys_table
220+
CREATE TABLE duplicated_keys_table
218221
AS VALUES
219222
(MAP {1: [1, NULL, 3], 1: [4, NULL, 6]});
220223

@@ -587,13 +590,15 @@ select map_extract(column1, 1), map_extract(column1, 5), map_extract(column1, 7)
587590
[[1, NULL, 3]] [NULL] [NULL]
588591
[NULL] [[4, NULL, 6]] [NULL]
589592
[NULL] [NULL] [[1, NULL, 3]]
593+
[NULL] [NULL] [NULL]
590594

591595
query ???
592596
select map_extract(column1, column2), map_extract(column1, column3), map_extract(column1, column4) from map_array_table_1;
593597
----
594598
[[1, NULL, 3]] [[1, NULL, 3]] [[1, NULL, 3]]
595599
[[4, NULL, 6]] [[4, NULL, 6]] [[4, NULL, 6]]
596600
[NULL] [NULL] [NULL]
601+
[NULL] [NULL] [NULL]
597602

598603
query ???
599604
select map_extract(column1, column2), map_extract(column1, column3), map_extract(column1, column4) from map_array_table_2;
@@ -658,6 +663,7 @@ SELECT map_keys(column1) from map_array_table_1;
658663
[1, 2, 3]
659664
[4, 5, 6]
660665
[7, 8, 9]
666+
NULL
661667

662668

663669
# Tests for map_values
@@ -709,6 +715,7 @@ SELECT map_values(column1) from map_array_table_1;
709715
[[1, NULL, 3], [4, NULL, 6], [7, 8, 9]]
710716
[[1, NULL, 3], [4, NULL, 6], [7, 8, 9]]
711717
[[1, NULL, 3], [9, NULL, 6], [7, 8, 9]]
718+
NULL
712719

713720
statement ok
714721
drop table map_array_table_1;

0 commit comments

Comments
 (0)