From a41f4a3f7ca038e8d3ff8c1ed66e49e73c0e15da Mon Sep 17 00:00:00 2001 From: ablack3 Date: Tue, 30 Dec 2025 23:08:17 +0000 Subject: [PATCH 1/2] add sql_translation method for duckdb --- NAMESPACE | 1 + R/backend-DatabaseConnector.R | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/NAMESPACE b/NAMESPACE index 28f26cf5..25475e77 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -18,6 +18,7 @@ S3method(listDatabaseConnectorColumns,DatabaseConnectorDbiConnection) S3method(listDatabaseConnectorColumns,default) S3method(sql_escape_logical,DatabaseConnectorJdbcConnection) S3method(sql_query_select,DatabaseConnectorJdbcConnection) +S3method(sql_translation,DatabaseConnectorDbiConnection) S3method(sql_translation,DatabaseConnectorJdbcConnection) export(DatabaseConnectorDriver) export(assertTempEmulationSchemaSet) diff --git a/R/backend-DatabaseConnector.R b/R/backend-DatabaseConnector.R index c1e2a650..3d5536e8 100644 --- a/R/backend-DatabaseConnector.R +++ b/R/backend-DatabaseConnector.R @@ -88,6 +88,16 @@ sql_translation.DatabaseConnectorJdbcConnection <- function(con) { rlang::abort("Sql dialect is not supported!")) } +#' @export +#' @importFrom dbplyr sql_translation +sql_translation.DatabaseConnectorDbiConnection <- function(con) { + + switch(dbms(con), + "sqlite" = utils::getFromNamespace("sql_translation.SQLiteConnection", "dbplyr")(con), + "duckdb" = utils::getFromNamespace("sql_translation.duckdb_connection", "duckdb")(con), + NextMethod()) +} + #' @importFrom dbplyr sql_escape_logical #' @export From d776553f8351db36ac335725ad5c9f5b984691d2 Mon Sep 17 00:00:00 2001 From: ablack3 Date: Wed, 7 Jan 2026 18:12:54 +0000 Subject: [PATCH 2/2] Add comments to sql_translation methods --- R/backend-DatabaseConnector.R | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/R/backend-DatabaseConnector.R b/R/backend-DatabaseConnector.R index 3d5536e8..7f74527b 100644 --- a/R/backend-DatabaseConnector.R +++ b/R/backend-DatabaseConnector.R @@ -71,6 +71,10 @@ sql_query_select.DatabaseConnectorJdbcConnection <- function(con, ) } +# Export a sql_translation method for JDBC connections that allows dplyr code to +# be correctly translated to SQL code. These functions are +# imported from the dbplyr package. + #' @export #' @importFrom dbplyr sql_translation sql_translation.DatabaseConnectorJdbcConnection <- function(con) { @@ -88,6 +92,10 @@ sql_translation.DatabaseConnectorJdbcConnection <- function(con) { rlang::abort("Sql dialect is not supported!")) } +# In addition to JDBC connections, DatabaseConnector also wraps duckdb and sqlite DBI connections +# Export a method to get correct dplyr to SQL translation environments when using these wrapped DBI connections +# See https://github.com/OHDSI/DatabaseConnector/issues/324 + #' @export #' @importFrom dbplyr sql_translation sql_translation.DatabaseConnectorDbiConnection <- function(con) {