## SET THESE OPTIONS AS APPROPRIATE

setSnowflakeOptions <- function(uid=NULL, pwd=NULL, dbname="prod", schema="public", wh="SCIENCE", drv="SnowflakeDSII", inuse=TRUE, defaults=FALSE) {

  ## Username
  if (!missing(uid))
  options("snowflake_uid" = uid)
  
  ## Password
  if (!missing(pwd))
  options("snowflake_pwd" = pwd)

  ## Database
  if (!missing(dbname) || defaults)
  options("snowflake_dbname" = dbname)

  ## schema
  if (!missing(schema) || defaults)
  options("snowflake_schema" = schema)

  ## Default warehouse
  options("snowflake_defaultwh" = wh)

  ## Default Driver -- make sure to set it up properly outside of R
  options("snowflake_driver" = drv)

  ## Flag to indicate whether snowflake is currently in use
  ## Used in some wrappers that are themselves useful for other DBs, eg postgres
  options("snowflake_inuse" = inuse)
}

showSnowflakeOptions <- function() {
  uid <-  getOption("snowflake_uid", default="NULL")
  pwd <-  getOption("snowflake_pwd", default="NULL")
  dbname <-  getOption("snowflake_dbname", default="NULL")
  schema <-  getOption("snowflake_schema", default="NULL")
  wh  <-  getOption("snowflake_defaultwh", default="NULL")
  drv <-  getOption("snowflake_driver", default="NULL")
  inuse <-  getOption("snowflake_inuse", default="NULL")

  fmt <- "%20s  =  %-15s"
  cat(sprintf(fmt, "USERNAME", uid)
    , sprintf(fmt, "PASSWORD", if (pwd == "NULL") pwd else "********")
    , sprintf(fmt, "DEFAULT WAREHOUSE", wh)
    , sprintf(fmt, "DATABASE", dbname)
    , sprintf(fmt, "SCHEMA", schema)
    , sprintf(fmt, "DRIVER NAME", drv)
    , sprintf(fmt, "SNOWFLAKE IN USE", as.character(inuse))
    , sep = "\n")
  return(invisible(NULL))
}

.get_sfEnvir <- function() {
  get("._sfEnvir", envir=globalenv())
}

if (!exists("._sfEnvir"))
  ._sfEnvir <- new.env(parent=globalenv())
