sqlSyncRemovePackages <- function()

in R/R/sqlPackage.R [2306:2358]


sqlSyncRemovePackages <- function(hodbc, pkgs, externalLibraryIds, scope, user, queryUser, verbose, languageName)
{
    if(verbose)
    {
        write(sprintf("%s  Removing packages from library path, this may take some time...", pkgTime()), stdout())
    }
    scopeint <- parseScope(scope)

    checkdf <- sqlRemoteExecuteFun(hodbc, findPackages, pkgs, scopeint, asuser = user, languageName = languageName)

    if(!(is.null(externalLibraryIds) || is.null(queryUser)))
    {
        setupFailures <- sqlQueryExternalLibrarySetupErrors(hodbc, externalLibraryIds, queryUser)

        # issue specific errors for packages that failed to be removed from  the library path
        #
        if((!is.null(setupFailures)) && (nrow(setupFailures) > 0))
        {
            errors <- mapply(
                function(packageName, errorCode, errorMessage)
                {
                    sprintf("failed to remove package (%s) from library path: user='%s', scope='%s', error code='%s', error message='%s'", packageName, user, scope, as.hexmode(errorCode), errorMessage)
                },
                setupFailures[,"name"], setupFailures[,"error_code"], setupFailures[,"error_message"]
            )

            stop(paste(errors, collapse = " ; "), call. = FALSE)
        }
    }

    # issue generic errors for packages that are still present in the library path
    #
    failedPackages <- unlist(mapply(
        function(packageName,found)
        {
            if (found == TRUE)
            {
                return (packageName)
            }
            return (NULL)
        },
        checkdf[,"Package"], checkdf[,"Found"],
        SIMPLIFY=TRUE,
        USE.NAMES=FALSE
    ))

    if(length(failedPackages) > 0)
    {
        stop(sprintf("failed to remove packages (%s) from library path: user='%s', scope='%s'", paste(failedPackages, collapse = ", "), user, scope), call. = FALSE)
    }

    return(pkgs)
}