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..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,20 @@ 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) { + + 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