[R-pkg-devel] DBI connection at package load
frédéric Clement
f.clems at gmail.com
Thu Aug 10 14:10:38 CEST 2017
hi duncan,
Thank you, it refreshed my memories on "local", cool.
About the dummy function to load packages, it lets Rstudio bring them in
the Namespace, kind of a tradeoff because of the warning I get in NAMESPACE
after building the documentation:
>>> # Generated by roxygen2: do not edit by hand
regards
frederic
On Fri, Aug 4, 2017 at 4:19 PM Duncan Murdoch <murdoch.duncan at gmail.com>
wrote:
> On 04/08/2017 5:51 AM, frédéric Clement wrote:
> > Hello,
> >
> > I want to use a package to load and set up a working environment (Only
> > intern used). It has function, but also create a connection object
> > (RPostgreSQL) to make dplyr::tbl implicitely use this connection.
> >
> > After trying to save the connection object in "Data\"... and failed. I
> made
> > the following work around.
> >
> > Is it the right way to do it, or should it be solved in other ways.
> >
> > PS: This is my first attent at package development experience, I mainly
> > follow http://r-pkgs.had.co.nz/
> >
> > regards
> >
> > frederic Clement
> >
> > ----- the script----
> >
> > .onAttach <- function(libname = find.package("dbName"), pkgname =
> "dbName")
> > {
> > packageStartupMessage("Intranet Company required")
> >
> > dbNameConPool = dbName_create_pool()
> > assign("dbNameConPool", dbNameConPool, envir =
> > as.environment("package:dbName"))
> > }
>
> Usually you should use .onLoad, not .onAttach. If someone who hasn't
> attached your package calls one of the functions using dbName::fn(...),
> your package will be loaded but not attached. Similarly if another
> package imports one of your functions.
>
>
> >
> >
> > ## This is a function so that I can call it in .onAttach
> > ##
> > dbName_create_pool = function(){
> >
> > DBI::dbConnect(drv = RPostgreSQL::PostgreSQL(),
> > user = "dbName",
> > password = .rs.askForPassword("Enter password:"),
> > port = 0000,
> > host = "dbName-int.company.com")
> > }
>
> However, for this particular use, it might be bad to put the code even
> in .onLoad. A better way to go would be to have a function in your
> package that calls dbName_create_pool the first time you call it, and
> just returns the same value on subsequent calls. For example,
>
> getcon <- local({
> con <- NULL
> function() {
> if (is.null(con))
> con <<- dbName_create_pool()
> con
> }})
>
>
> This way nobody is prompted for a password unless they actually need to
> access the database.
>
> >
> > #' Dummy function
> > #'
> > #' Only used for package build purpose
> > #' to import the usefull function.
> > #' @return NULL
> > #' @export
> > #' @import dplyr dbplyr DBI magrittr RPostgreSQL tidyr
> > #'
> > #' @examples
> > #' fun_import()
> > fun_import <- function(){
> > NULL
> > }
>
> Not sure why you'd want these 13 lines instead of editing your NAMESPACE
> file, but that's your choice...
>
> Duncan Murdoch
>
> >
> > --- session
> >
> > R version 3.4.1 (2017-06-30)
> > Platform: i386-w64-mingw32/i386 (32-bit)
> > Running under: Windows >= 8 x64 (build 9200)
> >
> > Matrix products: default
> >
> > locale:
> > [1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252
> > LC_MONETARY=German_Germany.1252 LC_NUMERIC=C
> > LC_TIME=German_Germany.1252
> >
> > attached base packages:
> > [1] stats graphics grDevices utils datasets methods base
> >
> > loaded via a namespace (and not attached):
> > [1] compiler_3.4.1 tools_3.4.1
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-package-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-package-devel
> >
>
>
[[alternative HTML version deleted]]
More information about the R-package-devel
mailing list