in R/R/sqlPackage.R [2091:2189]
sqlHelperInstallPackages <- function(connectionString, packages, owner = "", scope = "PRIVATE", verbose, languageName)
{
user <- "" # user argument for Create External Library
queryUser <- "CURRENT_USER" # user argument for select to discover external_library_id
scopeint <- parseScope(scope)
if (scopeint == 0 && owner == '')
{
# if scope is public the user has to be either dbo or member of db_owner
# if current user is already dbo we just proceed, else if user
# is member of db_owner (e.g. RevoTester) we run as 'dbo' to
# force it to install into the public folder instead of the private.
currentUser <- sqlSelectUser(connectionString);
if (currentUser == "dbo")
{
user <- ""
queryUser = "CURRENT_USER"
}
else
{
user <- "dbo"
queryUser = "'dbo'"
}
}
else
{
user <- owner
if (nchar(owner) > 0)
{
queryUser <- paste0("'", owner, "'")
}
}
hodbc <- NULL
haveTransaction <- FALSE
packagesSuccess <- c()
tryCatch({
hodbc <- connectToServer(connectionString)
checkResult(dbBegin(hodbc), expectedResult=TRUE, errorMessage="failed to create transaction")
haveTransaction <- TRUE
numPkgs <- nrow(packages)
for (packageIndex in 1:numPkgs)
{
packageName <- packages[packageIndex,"Package"]
filelocation <- packages[packageIndex, "File"]
attribute <- packages[packageIndex, "Attribute"]
if (verbose)
{
write(sprintf("%s Copying package to Sql server [%d/%d] %s...", pkgTime(), packageIndex, numPkgs, packageName), stdout())
}
sqlCreateExternalLibrary(hodbc, packageName, filelocation, user, languageName)
sqlAddExtendedProperty(hodbc, packageName, attribute, user)
}
if (verbose)
{
write(sprintf("%s Installing packages to library path, this may take some time...", pkgTime()), stdout())
}
packagesSuccess <- sqlSyncAndCheckInstalledPackages(hodbc, packages[,"Package"], user, queryUser, scope, languageName);
dbCommit(hodbc)
haveTransaction = FALSE
},
error = function(err)
{
stop( sprintf("Installation of packages %s failed with error %s", paste(packages[,"Package"], collapse = ', '), err$message), call. = FALSE)
},
finally =
{
if(haveTransaction)
{
# If we still have a transaction something went wrong and we need to rollback
#
dbRollback(hodbc)
}
if(!is.null(hodbc))
{
dbDisconnect(hodbc)
}
})
if(length(packagesSuccess) > 0)
{
if(verbose)
{
write(sprintf("%s Successfully installed packages on SQL server (%s).", pkgTime(), paste(packagesSuccess, collapse = ', ')), stdout())
}
else
{
write(sprintf("Successfully installed packages on SQL server (%s).", paste(packagesSuccess, collapse = ', ')), stdout())
}
}
}