From ccaac7cf50bc9b887d39859f4f5addef020462fa Mon Sep 17 00:00:00 2001 From: Kanishk Sachan Date: Wed, 3 Jun 2026 16:45:15 +0100 Subject: [PATCH] fix(spark): next_day should not trim whitespace from dayOfWeek MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spark's next_day function performs exact (case-insensitive) matching on the dayOfWeek argument — whitespace-padded values like ' MO ' are not valid day names and should return NULL, not be silently accepted. Remove the .trim() call from spark_next_day so that ' MO ', ' Monday ', and ' sun ' all return NULL, matching Spark's actual behavior. Adds three sqllogictest cases that previously returned a date but now correctly return NULL. Closes #22717 --- .../spark/src/function/datetime/next_day.rs | 2 +- .../test_files/spark/datetime/next_day.slt | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/datafusion/spark/src/function/datetime/next_day.rs b/datafusion/spark/src/function/datetime/next_day.rs index 2241043d44cd..110dbe432c64 100644 --- a/datafusion/spark/src/function/datetime/next_day.rs +++ b/datafusion/spark/src/function/datetime/next_day.rs @@ -210,7 +210,7 @@ where fn spark_next_day(days: i32, day_of_week: &str) -> Option { let date = Date32Type::to_naive_date_opt(days)?; - let day_of_week = day_of_week.trim().to_uppercase(); + let day_of_week = day_of_week.to_uppercase(); let day_of_week = match day_of_week.as_str() { "MO" | "MON" | "MONDAY" => Some("MONDAY"), "TU" | "TUE" | "TUESDAY" => Some("TUESDAY"), diff --git a/datafusion/sqllogictest/test_files/spark/datetime/next_day.slt b/datafusion/sqllogictest/test_files/spark/datetime/next_day.slt index 872d1f2b58eb..e81e76fabf77 100644 --- a/datafusion/sqllogictest/test_files/spark/datetime/next_day.slt +++ b/datafusion/sqllogictest/test_files/spark/datetime/next_day.slt @@ -64,6 +64,22 @@ SELECT next_day('2020-01-01'::DATE, 'invalid_day'::string); ---- NULL +# Whitespace must NOT be trimmed — Spark does not accept padded day names (issue #22717) +query D +SELECT next_day('2024-01-01'::DATE, ' MO '::string); +---- +NULL + +query D +SELECT next_day('2024-01-01'::DATE, ' Monday '::string); +---- +NULL + +query D +SELECT next_day('2024-01-01'::DATE, ' sun '::string); +---- +NULL + query error Cast error: Cannot cast string '2015-13-32' to value of Date32 type SELECT next_day('2015-13-32'::DATE, 'Sun'::string);