TL: DR odbc::dbConnect
.
odbc
github . dbConnect
db. :
if (!is.null(getOption("connectionObserver"))) {
addTaskCallback(function(expr, ...) {
tryCatch({
if (is.call(expr) && identical(expr[[1]], as.symbol("<-"))) {
on_connection_opened(eval(expr[[2]]), paste(
c("library(odbc)", deparse(expr)), collapse = "\n"))
}
}, error = function(e) {
warning("Could not notify connection observer. ", e$message, call. = FALSE)
})
FALSE
})
}
warning
. , . ?
, , .
, , "TaskCallBack". , top-level task
. 100%, , , , .
script. , :
library(odbc)
con <- odbc::dbConnect(odbc::odbc(), ...)
:
function(expr, ...) {
tryCatch({
if (is.call(expr) && identical(expr[[1]], as.symbol("<-"))) {
on_connection_opened(eval(expr[[2]]), paste(
c("library(odbc)", deparse(expr)), collapse = "\n"))
}
}, error = function(e) {
warning("Could not notify connection observer. ", e$message, call. = FALSE)
}
}
. odbc
, on_connection_opened
, . , - tryCatch
.
on_connection_opened
?
:
on_connection_opened <- function(connection, code)
, , :
display_name <- connection@info$dbname
, :
"" ( "" )
, on_connection_opened
. ? eval(expr[[2]])
: con
, .
, :
?
, . . , , . .
, dbListTables ?
dbListTables
, dbConnect
is. , , .
/ , ?
. , , .
, TaskCallback:
before <- getTaskCallbackNames()
con <- odbc::dbConnect(odbc::odbc(), ...)
after <- getTaskCallbackNames()
removeTaskCallback(which(!after %in% before))
on_connection_opened
? ?
Github, RStudio. , . , .