1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
#' Miscellaneous database generics
#'
#' * `db_connection_describe()` provides a short string describing the
#' database connection, helping users tell which database a table comes
#' from. It should be a single line, and ideally less than 60 characters wide.
#'
#' * `dbplyr_edition()` declares which version of the dbplyr API you want.
#' See below for more details.
#'
#' @section dbplyr 2.0.0:
#' dbplyr 2.0.0 renamed a number of generics so that they could be cleanly moved
#' from dplyr to dbplyr. If you have an existing backend, you'll need to rename
#' the following methods.
#'
#' * `dplyr::db_desc()` -> `dbplyr::db_connection_describe()` (also note that
#' the argument named changed from `x` to `con`).
#'
#' @family generic
#' @keywords internal
#' @name db-misc
#' @aliases NULL
NULL
dbplyr_connection_describe <- function(con, ...) {
dbplyr_fallback(con, "db_desc", ...)
}
#' @export
#' @importFrom dplyr db_desc
db_desc.DBIConnection <- function(x) {
db_connection_describe(x)
}
#' @export
#' @rdname db-misc
db_connection_describe <- function(con) {
UseMethod("db_connection_describe")
}
# nocov start
#' @export
db_connection_describe.DBIConnection <- function(con) {
class(con)[[1]]
}
# nocov end
#' @rdname db-misc
#' @export
sql_join_suffix <- function(con, ...) {
UseMethod("sql_join_suffix")
}
#' @export
sql_join_suffix.DBIConnection <- function(con, ...) {
c(".x", ".y")
}
#' @rdname db-misc
#' @export
db_sql_render <- function(con, sql, ..., cte = FALSE) {
UseMethod("db_sql_render")
}
#' @export
db_sql_render.DBIConnection <- function(con, sql, ..., cte = FALSE) {
sql_render(sql, con = con, ..., cte = cte)
}
#' @rdname db-misc
#' @export
dbplyr_edition <- function(con) {
UseMethod("dbplyr_edition")
}
#' @export
dbplyr_edition.default <- function(con) {
1L
}
# Needed because pool uses an object of call Pool/R6
# fallback helper ---------------------------------------------------------
dbplyr_fallback <- function(con, .generic, ...) {
if (dbplyr_edition(con) >= 2) {
# Always call DBIConnection method which contains the default implementation
fun <- sym(paste0(.generic, ".DBIConnection"))
} else {
class <- class(con)[[1]]
warn(
c(
paste0("<", class, "> uses an old dbplyr interface"),
i = "Please install a newer version of the package or contact the maintainer"
),
.frequency = "regularly",
.frequency_id = paste0(class, "-edition")
)
fun <- call("::", quote(dplyr), sym(.generic))
}
eval_bare(expr((!!fun)(con, ...)))
}
|