Skip to contents

Re-reads every CS9_DBCONFIG_* environment variable and rebuilds the four configuration tables.

Usage

reload_db_config()

Value

invisible(NULL), called for its effect on config.

Details

cs9 reads the environment once, in its own .onLoad(). A package that sets its own CS9_DBCONFIG_* values inside .onLoad() therefore sets them too late. cs9 is a dependency, so cs9 loads first. cs9 reads the environment before the dependent package runs. Call this function immediately after the Sys.setenv() block. cs9 then picks the new values up.

It re-runs set_env_vars(), which rebuilds config$dbconfigs, and then setup_database_tables(), which rebuilds config$tables. Neither opens a database connection: csdb::DBTable_v9 creates its table lazily, on first use.

State safety

The reload is safe against both a failed reload and a repeated one.

It disconnects every table it is about to discard, so a second reload does not leak the connections held by the R6 objects it replaces.

It then empties config$tables before it touches config$dbconfigs. A failure anywhere after that point therefore leaves config$tables empty rather than holding tables built from the previous configuration. An empty table list is an honest "not configured"; a stale one describes a database that config$dbconfigs no longer points at.

See also

check_environment_setup(), which reports whether the environment is complete. The installation vignette, vignette("installation", package = "cs9").

Examples

if (FALSE) { # \dontrun{
# In a dependent package's .onLoad(), before its own setup runs
Sys.setenv(CS9_DBCONFIG_ACCESS = "config/anon")
Sys.setenv(CS9_DBCONFIG_DRIVER = "SQLite")
Sys.setenv(CS9_DBCONFIG_DB_CONFIG = "/tmp/config.sqlite")
Sys.setenv(CS9_DBCONFIG_DB_ANON = "/tmp/anon.sqlite")
cs9::reload_db_config()
} # }