@@ -3269,6 +3269,47 @@ def test_week(self):
32693269 },
32703270 )
32713271
3272+ # Test Negative difference with WEEK(SUNDAY) - verifies argument order swapping
3273+ self .validate_all (
3274+ "DATE_DIFF(DATE '2024-01-01', DATE '2024-01-15', WEEK(SUNDAY))" ,
3275+ write = {
3276+ "bigquery" : "DATE_DIFF(CAST('2024-01-01' AS DATE), CAST('2024-01-15' AS DATE), WEEK)" ,
3277+ "duckdb" : "DATE_DIFF('DAY', DATE_TRUNC('WEEK', CAST('2024-01-15' AS DATE) + INTERVAL '1' DAY), DATE_TRUNC('WEEK', CAST('2024-01-01' AS DATE) + INTERVAL '1' DAY)) // 7" ,
3278+ },
3279+ )
3280+ # Test Negative difference with ISOWEEK - verifies argument order swapping
3281+ self .validate_all (
3282+ "DATE_DIFF(DATE '2024-01-01', DATE '2024-01-15', ISOWEEK)" ,
3283+ write = {
3284+ "bigquery" : "DATE_DIFF(CAST('2024-01-01' AS DATE), CAST('2024-01-15' AS DATE), ISOWEEK)" ,
3285+ "duckdb" : "DATE_DIFF('DAY', DATE_TRUNC('WEEK', CAST('2024-01-15' AS DATE)), DATE_TRUNC('WEEK', CAST('2024-01-01' AS DATE))) // 7" ,
3286+ },
3287+ )
3288+ # Test Year boundary crossing (negative difference)
3289+ self .validate_all (
3290+ "DATE_DIFF(DATE '2023-12-25', DATE '2024-01-08', WEEK(SUNDAY))" ,
3291+ write = {
3292+ "bigquery" : "DATE_DIFF(CAST('2023-12-25' AS DATE), CAST('2024-01-08' AS DATE), WEEK)" ,
3293+ "duckdb" : "DATE_DIFF('DAY', DATE_TRUNC('WEEK', CAST('2024-01-08' AS DATE) + INTERVAL '1' DAY), DATE_TRUNC('WEEK', CAST('2023-12-25' AS DATE) + INTERVAL '1' DAY)) // 7" ,
3294+ },
3295+ )
3296+ # Test Year boundary crossing (positive difference)
3297+ self .validate_all (
3298+ "DATE_DIFF(DATE '2024-01-08', DATE '2023-12-25', WEEK(SUNDAY))" ,
3299+ write = {
3300+ "bigquery" : "DATE_DIFF(CAST('2024-01-08' AS DATE), CAST('2023-12-25' AS DATE), WEEK)" ,
3301+ "duckdb" : "DATE_DIFF('DAY', DATE_TRUNC('WEEK', CAST('2023-12-25' AS DATE) + INTERVAL '1' DAY), DATE_TRUNC('WEEK', CAST('2024-01-08' AS DATE) + INTERVAL '1' DAY)) // 7" ,
3302+ },
3303+ )
3304+ # Test DAY unit with negative difference - verifies non-week argument swapping
3305+ self .validate_all (
3306+ "DATE_DIFF(DATE '2024-01-01', DATE '2024-01-15', DAY)" ,
3307+ write = {
3308+ "bigquery" : "DATE_DIFF(CAST('2024-01-01' AS DATE), CAST('2024-01-15' AS DATE), DAY)" ,
3309+ "duckdb" : "DATE_DIFF('DAY', CAST('2024-01-15' AS DATE), CAST('2024-01-01' AS DATE))" ,
3310+ },
3311+ )
3312+
32723313 def test_approx_qunatiles (self ):
32733314 self .validate_identity ("APPROX_QUANTILES(foo, 2)" )
32743315 self .validate_identity ("APPROX_QUANTILES(DISTINCT foo, 2 RESPECT NULLS)" )
0 commit comments