Skip to content

Commit 63b94c8

Browse files
authored
fix null date args in range (#14093)
* fix null dates in range * fix --------- Co-authored-by: Cyprien Huet <[email protected]>
1 parent e8cac16 commit 63b94c8

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

datafusion/functions-nested/src/range.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,17 +448,29 @@ fn gen_range_date(args: &[ArrayRef], include_upper_bound: bool) -> Result<ArrayR
448448
let values_builder = Date32Builder::new();
449449
let mut list_builder = ListBuilder::new(values_builder);
450450

451-
for (idx, stop) in stop_array.iter().enumerate() {
452-
let mut stop = stop.unwrap_or(0);
451+
for idx in 0..stop_array.len() {
452+
if stop_array.is_null(idx) {
453+
list_builder.append_null();
454+
continue;
455+
}
456+
let mut stop = stop_array.value(idx);
453457

454458
let start = if let Some(start_array_values) = start_array {
459+
if start_array_values.is_null(idx) {
460+
list_builder.append_null();
461+
continue;
462+
}
455463
start_array_values.value(idx)
456464
} else {
457465
list_builder.append_null();
458466
continue;
459467
};
460468

461469
let step = if let Some(step) = step_array {
470+
if step.is_null(idx) {
471+
list_builder.append_null();
472+
continue;
473+
}
462474
step.value(idx)
463475
} else {
464476
list_builder.append_null();

datafusion/sqllogictest/test_files/array.slt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6091,6 +6091,21 @@ select range(NULL, DATE '1993-03-01', INTERVAL '1' YEAR);
60916091
----
60926092
NULL
60936093

6094+
query ?
6095+
select generate_series(NULL::Date, DATE '1993-03-01', INTERVAL '1' YEAR);
6096+
----
6097+
NULL
6098+
6099+
query ?
6100+
select generate_series(DATE '1993-03-01', NULL::Date, INTERVAL '1' YEAR);
6101+
----
6102+
NULL
6103+
6104+
query ?
6105+
select generate_series(DATE '1993-02-01', DATE '1993-03-01', NULL::Interval);
6106+
----
6107+
NULL
6108+
60946109
query ?
60956110
select range(NULL, TIMESTAMP '1993-03-01', INTERVAL '1' YEAR);
60966111
----
@@ -6201,6 +6216,21 @@ select generate_series(NULL, DATE '1993-03-01', INTERVAL '1' YEAR);
62016216
----
62026217
NULL
62036218

6219+
query ?
6220+
select generate_series(NULL::Date, DATE '1993-03-01', INTERVAL '1' YEAR);
6221+
----
6222+
NULL
6223+
6224+
query ?
6225+
select generate_series(DATE '1993-03-01', NULL::Date, INTERVAL '1' YEAR);
6226+
----
6227+
NULL
6228+
6229+
query ?
6230+
select generate_series(DATE '1993-02-01', DATE '1993-03-01', NULL::Interval);
6231+
----
6232+
NULL
6233+
62046234
query ?
62056235
select generate_series(NULL, TIMESTAMP '1993-03-01', INTERVAL '1' YEAR);
62066236
----

0 commit comments

Comments
 (0)