From 2f01501ea40fca92ecb92e8477c16aac8fdff98d Mon Sep 17 00:00:00 2001 From: IoannaNika Date: Wed, 8 Jan 2025 10:48:03 +0100 Subject: [PATCH 1/2] fix add_days and add_years so that argument n can be a variable --- R/backend-dbplyr__duckdb_connection.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/backend-dbplyr__duckdb_connection.R b/R/backend-dbplyr__duckdb_connection.R index a36bf377a..660094e18 100644 --- a/R/backend-dbplyr__duckdb_connection.R +++ b/R/backend-dbplyr__duckdb_connection.R @@ -275,10 +275,10 @@ sql_translation.duckdb_connection <- function(con) { # clock add_days = function(x, n, ...) { - build_sql("DATE_ADD(", !!x, ", INTERVAL '", n ," day')") + build_sql("DATE_ADD(", !!x, ", INTERVAL (", n ,") day)") }, add_years = function(x, n, ...) { - build_sql("DATE_ADD(", !!x, ", INTERVAL '", n ," year')") + build_sql("DATE_ADD(", !!x, ", INTERVAL (", n ,") year)") }, get_year = function(x) { build_sql("DATE_PART('year', ", !!x, ")") From b207e81250946a3ebcbfd4a90a2abb9f937f5db9 Mon Sep 17 00:00:00 2001 From: IoannaNika Date: Wed, 8 Jan 2025 10:49:16 +0100 Subject: [PATCH 2/2] update tests related to add_days() and add_years() --- tests/testthat/test-backend-dbplyr__duckdb_connection.R | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/testthat/test-backend-dbplyr__duckdb_connection.R b/tests/testthat/test-backend-dbplyr__duckdb_connection.R index 0a4435c1e..1d74d44c5 100644 --- a/tests/testthat/test-backend-dbplyr__duckdb_connection.R +++ b/tests/testthat/test-backend-dbplyr__duckdb_connection.R @@ -141,11 +141,12 @@ test_that("custom clock functions translated correctly", { translate <- function(...) dbplyr::translate_sql(..., con = con) sql <- function(...) dbplyr::sql(...) - expect_equal(translate(add_days(x, 1L)), sql(r"{DATE_ADD(x, INTERVAL '1 day')}")) - expect_equal(translate(add_days(x, 2L)), sql(r"{DATE_ADD(x, INTERVAL '2 day')}")) + m <- 1 + expect_equal(translate(add_days(x, m)), sql(r"{DATE_ADD(x, INTERVAL (m) day)}")) + expect_equal(translate(add_days(x, 2L)), sql(r"{DATE_ADD(x, INTERVAL (2) day)}")) - expect_equal(translate(add_years(x, 1L)), sql(r"{DATE_ADD(x, INTERVAL '1 year')}")) - expect_equal(translate(add_years(x, 2L)), sql(r"{DATE_ADD(x, INTERVAL '2 year')}")) + expect_equal(translate(add_years(x, m)), sql(r"{DATE_ADD(x, INTERVAL (m) year)}")) + expect_equal(translate(add_years(x, 2L)), sql(r"{DATE_ADD(x, INTERVAL (2) year)}")) expect_equal(translate(get_day(x)), sql(r"{DATE_PART('day', x)}")) expect_equal(translate(get_month(x)), sql(r"{DATE_PART('month', x)}"))