diff --git a/.Rbuildignore b/.Rbuildignore index f75b4029..b7475913 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,3 +1,5 @@ +^renv$ +^renv\.lock$ ^CRAN-RELEASE$ extras man-roxygen diff --git a/.github/workflows/R_CMD_check_Hades.yaml b/.github/workflows/R_CMD_check_Hades.yaml index 2c7779ef..eae529cc 100644 --- a/.github/workflows/R_CMD_check_Hades.yaml +++ b/.github/workflows/R_CMD_check_Hades.yaml @@ -99,9 +99,31 @@ jobs: - uses: r-lib/actions/setup-r-dependencies@v2 with: - extra-packages: any::rcmdcheck + extra-packages: any::rcmdcheck reticulate needs: check + - uses: actions/setup-python@v4 + with: + python-version: "3.x" + + - name: setup r-reticulate venv + shell: Rscript {0} + run: | + + if (.Platform$OS.type == "unix" && Sys.info()["sysname"] == "Darwin") { + # macOS + python_path <- "/usr/bin/python3" + } else { + # Windows and Linux + python_path <- Sys.which("python") + } + + path_to_python <- reticulate::virtualenv_create( + envname = "r-reticulate", + python = python_path, + packages = c("sqlglot") + ) + - uses: r-lib/actions/check-r-package@v2 with: args: 'c("--no-manual", "--as-cran")' diff --git a/DESCRIPTION b/DESCRIPTION index 1f2532df..459dda99 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -52,7 +52,8 @@ Suggests: bigrquery, pool, ParallelLogger, - AzureStor + AzureStor, + reticulate License: Apache License VignetteBuilder: knitr URL: https://ohdsi.github.io/DatabaseConnector/, https://github.com/OHDSI/DatabaseConnector diff --git a/R/Connect.R b/R/Connect.R index 3b87d83f..62f9d529 100644 --- a/R/Connect.R +++ b/R/Connect.R @@ -31,7 +31,8 @@ checkIfDbmsIsSupported <- function(dbms) { "snowflake", "synapse", "duckdb", - "iris" + "iris", + "muckdb" ) deprecated <- c( "hive", @@ -292,10 +293,10 @@ connect <- function(connectionDetails = NULL, # Using default connectionDetails assertDetailsCanBeValidated(connectionDetails) checkIfDbmsIsSupported(connectionDetails$dbms) - + if (connectionDetails$dbms %in% c("sqlite", "sqlite extended")) { connectSqlite(connectionDetails) - } else if (connectionDetails$dbms == "duckdb") { + } else if (connectionDetails$dbms %in% c("duckdb", "muckdb")) { connectDuckdb(connectionDetails) } else if (connectionDetails$dbms == "spark" && is.null(connectionDetails$connectionString())) { connectSparkUsingOdbc(connectionDetails) @@ -614,7 +615,7 @@ connectHive <- function(connectionDetails) { inform("Connecting using Hive driver") jarPath <- findPathToJar("^hive-jdbc-([.0-9]+-)*standalone\\.jar$", connectionDetails$pathToDriver) driver <- getJbcDriverSingleton("org.apache.hive.jdbc.HiveDriver", jarPath) - + if (is.null(connectionDetails$connectionString()) || connectionDetails$connectionString() == "") { connectionString <- paste0("jdbc:hive2://", connectionDetails$server(), ":", connectionDetails$port(), "/") if (!is.null(connectionDetails$extraSettings)) { @@ -825,7 +826,7 @@ connectUsingDbi <- function(dbiConnectionDetails) { dbms <- dbiConnectionDetails$dbms dbiConnectionDetails$dbms <- NULL dbiConnection <- do.call(DBI::dbConnect, dbiConnectionDetails) - + connection <- new("DatabaseConnectorDbiConnection", server = dbms, dbiConnection = dbiConnection, @@ -842,6 +843,17 @@ connectUsingDbi <- function(dbiConnectionDetails) { connectDuckdb <- function(connectionDetails) { inform("Connecting using DuckDB driver") ensure_installed("duckdb") + + # Use muckdb if requested + if (connectionDetails$dbms == "muckdb") { + ensure_installed("reticulate") + if (!reticulate::py_module_available("sqlglot")) + stop("Python module 'sqlglot' is required. Install via pip: pip install sqlglot or reticulate::install_python('sqlglot')") + + checkIfDbmsIsSupported(connectionDetails$connectionString()) + inform(paste(connectionDetails$connectionString(), "mucks like \U1f986")) + } + connection <- connectUsingDbi( createDbiConnectionDetails( dbms = connectionDetails$dbms, @@ -850,9 +862,9 @@ connectDuckdb <- function(connectionDetails) { bigint = "integer64" ) ) - # Check if ICU extension if installed, and if not, try to install it: + # Check if ICU extension is installed, and if not, try to install it: isInstalled <- querySql( - connection = connection, + connection = connection, sql = "SELECT installed FROM duckdb_extensions() WHERE extension_name = 'icu';" )[1, 1] if (!isInstalled) { @@ -860,14 +872,22 @@ connectDuckdb <- function(connectionDetails) { tryCatch( executeSql(connection, "INSTALL icu"), error = function(e) { - warning("Attempting to install the ICU extension of DuckDB failed.\n", + warning("Attempting to install the ICU extension of DuckDB failed.\n", "You may need to check your internet connection.\n", "For more detail, try 'executeSql(connection, \"INSTALL icu\")'.\n", - "Be aware that some time and date functionality will not be available.") + "Be aware that some time and date functionality will not be available.") return(NULL) } ) } + + # For muckdb, set dbms attribute to the target dialect for translation and attaches transpiler + if (connectionDetails$dbms == "muckdb") { + attr(connection, "dbms") <- connectionDetails$connectionString() + attr(connection, "sqlglot") <- reticulate::import("sqlglot") + attr(connection, "isMuckDb") <- TRUE + } + return(connection) } diff --git a/R/Sql.R b/R/Sql.R index 409f94a5..f67e022e 100644 --- a/R/Sql.R +++ b/R/Sql.R @@ -151,7 +151,13 @@ executeSql <- function(connection, if (!DBI::dbIsValid(connection)) { abort("Connection is closed") } - + + if (isTRUE(attr(connection, "isMuckDb"))) { + sqlglot <- attr(connection, "sqlglot") + sql <- sqlglot$transpile(sql, read = dbms(connection), write = "duckdb", unsupported_level = "IGNORE") |> + paste(collapse = ";\n") + } + startTime <- Sys.time() dbms <- dbms(connection) @@ -331,6 +337,12 @@ querySql <- function(connection, if (!DBI::dbIsValid(connection)) { abort("Connection is closed") } + + if (isTRUE(attr(connection, "isMuckDb"))) { + sqlglot <- attr(connection, "sqlglot") + sql <- sqlglot$transpile(sql, read = dbms(connection), write = "duckdb", unsupported_level = "IGNORE") + } + # Calling splitSql, because this will also strip trailing semicolons (which cause Oracle to crash). sqlStatements <- SqlRender::splitSql(sql) if (length(sqlStatements) > 1) { diff --git a/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd b/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd index 8add657f..ceb1a752 100644 --- a/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd @@ -15,7 +15,7 @@ ) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{name}{The table name, passed on to \code{\link[DBI:dbQuoteIdentifier]{dbQuoteIdentifier()}}. Options are: @@ -50,6 +50,7 @@ The default implementation calls \code{\link[DBI:sqlAppendTableTemplate]{sqlAppe \code{\link[DBI:dbExecute]{dbExecute()}} with the \code{param} argument. Use \code{\link[DBI:dbAppendTableArrow]{dbAppendTableArrow()}} to append data from an Arrow stream. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbAppendTable")} } \details{ The \code{databaseSchema} argument is interpreted differently according to the different platforms: diff --git a/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd b/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd index 46ecb85e..61592f29 100644 --- a/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbClearResult}{DatabaseConnectorDbiResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -22,6 +22,7 @@ Frees all resources (local and remote) associated with a result set. This step is mandatory for all objects obtained by calling \code{\link[DBI:dbSendQuery]{dbSendQuery()}} or \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbClearResult")} } \seealso{ Other DBIResult generics: diff --git a/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd b/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd index c84ba858..3c78a432 100644 --- a/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbClearResult}{DatabaseConnectorJdbcResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -22,6 +22,7 @@ Frees all resources (local and remote) associated with a result set. This step is mandatory for all objects obtained by calling \code{\link[DBI:dbSendQuery]{dbSendQuery()}} or \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbClearResult")} } \seealso{ Other DBIResult generics: diff --git a/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd b/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd index 424e9aba..2a16fe37 100644 --- a/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbColumnInfo}{DatabaseConnectorDbiResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -28,6 +28,7 @@ should have as many rows as there are output fields in the result set, and each column in the data.frame describes an aspect of the result set field (field name, type, etc.) +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbColumnInfo")} } \seealso{ Other DBIResult generics: diff --git a/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd b/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd index 38129110..efca1adb 100644 --- a/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbColumnInfo}{DatabaseConnectorJdbcResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -28,6 +28,7 @@ should have as many rows as there are output fields in the result set, and each column in the data.frame describes an aspect of the result set field (field name, type, etc.) +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbColumnInfo")} } \seealso{ Other DBIResult generics: diff --git a/man/dbCreateTable-DatabaseConnectorConnection-method.Rd b/man/dbCreateTable-DatabaseConnectorConnection-method.Rd index f4fdf184..9e5375f5 100644 --- a/man/dbCreateTable-DatabaseConnectorConnection-method.Rd +++ b/man/dbCreateTable-DatabaseConnectorConnection-method.Rd @@ -15,7 +15,7 @@ ) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{name}{The table name, passed on to \code{\link[DBI:dbQuoteIdentifier]{dbQuoteIdentifier()}}. Options are: @@ -53,6 +53,7 @@ The default \code{dbCreateTable()} method calls \code{\link[DBI:sqlCreateTable]{ \code{\link[DBI:dbExecute]{dbExecute()}}. Use \code{\link[DBI:dbCreateTableArrow]{dbCreateTableArrow()}} to create a table from an Arrow schema. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbCreateTable")} } \details{ The \code{databaseSchema} argument is interpreted differently according to the different platforms: diff --git a/man/dbDisconnect-DatabaseConnectorConnection-method.Rd b/man/dbDisconnect-DatabaseConnectorConnection-method.Rd index e66ae8ed..f60a3cbb 100644 --- a/man/dbDisconnect-DatabaseConnectorConnection-method.Rd +++ b/man/dbDisconnect-DatabaseConnectorConnection-method.Rd @@ -7,7 +7,7 @@ \S4method{dbDisconnect}{DatabaseConnectorConnection}(conn) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} } \value{ @@ -17,6 +17,7 @@ This closes the connection, discards all pending work, and frees resources (e.g., memory, sockets). +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbDisconnect")} } \seealso{ Other DBIConnection generics: diff --git a/man/dbExecute-DatabaseConnectorDbiConnection-character-method.Rd b/man/dbExecute-DatabaseConnectorDbiConnection-character-method.Rd index 7010409b..451cda6e 100644 --- a/man/dbExecute-DatabaseConnectorDbiConnection-character-method.Rd +++ b/man/dbExecute-DatabaseConnectorDbiConnection-character-method.Rd @@ -7,7 +7,7 @@ \S4method{dbExecute}{DatabaseConnectorDbiConnection,character}(conn, statement, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{statement}{a character string containing SQL.} @@ -30,6 +30,7 @@ the result is always freed by \code{\link[DBI:dbClearResult]{dbClearResult()}}. For passing query parameters, see \code{\link[DBI:dbBind]{dbBind()}}, in particular the "The command execution flow" section. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbExecute")} } \details{ You can also use \code{dbExecute()} to call a stored procedure diff --git a/man/dbExecute-DatabaseConnectorJdbcConnection-character-method.Rd b/man/dbExecute-DatabaseConnectorJdbcConnection-character-method.Rd index 56e817ef..f1aa455a 100644 --- a/man/dbExecute-DatabaseConnectorJdbcConnection-character-method.Rd +++ b/man/dbExecute-DatabaseConnectorJdbcConnection-character-method.Rd @@ -7,7 +7,7 @@ \S4method{dbExecute}{DatabaseConnectorJdbcConnection,character}(conn, statement, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{statement}{a character string containing SQL.} @@ -30,6 +30,7 @@ the result is always freed by \code{\link[DBI:dbClearResult]{dbClearResult()}}. For passing query parameters, see \code{\link[DBI:dbBind]{dbBind()}}, in particular the "The command execution flow" section. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbExecute")} } \details{ You can also use \code{dbExecute()} to call a stored procedure diff --git a/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd b/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd index 663b81df..ca864ae9 100644 --- a/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd @@ -7,7 +7,7 @@ \S4method{dbExistsTable}{DatabaseConnectorConnection,character}(conn, name, databaseSchema = NULL, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{name}{The table name, passed on to \code{\link[DBI:dbQuoteIdentifier]{dbQuoteIdentifier()}}. Options are: @@ -33,6 +33,7 @@ This includes temporary tables if supported by the database. \description{ Returns if a table given by name exists in the database. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbExistsTable")} } \details{ The \code{databaseSchema} argument is interpreted differently according to the different platforms: diff --git a/man/dbFetch-DatabaseConnectorDbiResult-method.Rd b/man/dbFetch-DatabaseConnectorDbiResult-method.Rd index d0228c14..d5c5c13a 100644 --- a/man/dbFetch-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbFetch-DatabaseConnectorDbiResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbFetch}{DatabaseConnectorDbiResult}(res, n = -1, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}, created by +\item{res}{An object inheriting from \linkS4class{DBIResult}, created by \code{\link[DBI:dbSendQuery]{dbSendQuery()}}.} \item{n}{maximum number of records to retrieve per fetch. Use \code{n = -1} @@ -31,6 +31,7 @@ as specified by the driver, but at most the remaining rows in the result set. Fetch the next \code{n} elements (rows) from the result set and return them as a data.frame. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbFetch")} } \details{ \code{fetch()} is provided for compatibility with older DBI clients - for all diff --git a/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd b/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd index 1863a0c5..a7d003ca 100644 --- a/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbFetch}{DatabaseConnectorJdbcResult}(res, n = -1, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}, created by +\item{res}{An object inheriting from \linkS4class{DBIResult}, created by \code{\link[DBI:dbSendQuery]{dbSendQuery()}}.} \item{n}{maximum number of records to retrieve per fetch. Use \code{n = -1} @@ -31,6 +31,7 @@ as specified by the driver, but at most the remaining rows in the result set. Fetch the next \code{n} elements (rows) from the result set and return them as a data.frame. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbFetch")} } \details{ \code{fetch()} is provided for compatibility with older DBI clients - for all diff --git a/man/dbGetInfo-DatabaseConnectorConnection-method.Rd b/man/dbGetInfo-DatabaseConnectorConnection-method.Rd index 98f0aa60..2546173d 100644 --- a/man/dbGetInfo-DatabaseConnectorConnection-method.Rd +++ b/man/dbGetInfo-DatabaseConnectorConnection-method.Rd @@ -7,14 +7,14 @@ \S4method{dbGetInfo}{DatabaseConnectorConnection}(dbObj, ...) } \arguments{ -\item{dbObj}{An object inheriting from \link[DBI:DBIObject-class]{DBIObject}, -i.e. \link[DBI:DBIDriver-class]{DBIDriver}, \link[DBI:DBIConnection-class]{DBIConnection}, -or a \link[DBI:DBIResult-class]{DBIResult}} +\item{dbObj}{An object inheriting from \linkS4class{DBIObject}, +i.e. \linkS4class{DBIDriver}, \linkS4class{DBIConnection}, +or a \linkS4class{DBIResult}} \item{...}{Other arguments to methods.} } \value{ -For objects of class \link[DBI:DBIDriver-class]{DBIDriver}, \code{dbGetInfo()} +For objects of class \linkS4class{DBIDriver}, \code{dbGetInfo()} returns a named list that contains at least the following components: \itemize{ @@ -22,7 +22,7 @@ that contains at least the following components: \item \code{client.version}: the version of the DBMS client library. } -For objects of class \link[DBI:DBIConnection-class]{DBIConnection}, \code{dbGetInfo()} +For objects of class \linkS4class{DBIConnection}, \code{dbGetInfo()} returns a named list that contains at least the following components: \itemize{ @@ -35,7 +35,7 @@ It must not contain a \code{password} component. Components that are not applicable should be set to \code{NA}. } -For objects of class \link[DBI:DBIResult-class]{DBIResult}, \code{dbGetInfo()} +For objects of class \linkS4class{DBIResult}, \code{dbGetInfo()} returns a named list that contains at least the following components: \itemize{ @@ -51,9 +51,10 @@ as returned by \code{\link[DBI:dbHasCompleted]{dbHasCompleted()}}. } } \description{ -Retrieves information on objects of class \link[DBI:DBIDriver-class]{DBIDriver}, -\link[DBI:DBIConnection-class]{DBIConnection} or \link[DBI:DBIResult-class]{DBIResult}. +Retrieves information on objects of class \linkS4class{DBIDriver}, +\linkS4class{DBIConnection} or \linkS4class{DBIResult}. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbGetInfo")} } \seealso{ Other DBIDriver generics: diff --git a/man/dbGetInfo-DatabaseConnectorDriver-method.Rd b/man/dbGetInfo-DatabaseConnectorDriver-method.Rd index 31c30896..f16a2c4c 100644 --- a/man/dbGetInfo-DatabaseConnectorDriver-method.Rd +++ b/man/dbGetInfo-DatabaseConnectorDriver-method.Rd @@ -7,14 +7,14 @@ \S4method{dbGetInfo}{DatabaseConnectorDriver}(dbObj, ...) } \arguments{ -\item{dbObj}{An object inheriting from \link[DBI:DBIObject-class]{DBIObject}, -i.e. \link[DBI:DBIDriver-class]{DBIDriver}, \link[DBI:DBIConnection-class]{DBIConnection}, -or a \link[DBI:DBIResult-class]{DBIResult}} +\item{dbObj}{An object inheriting from \linkS4class{DBIObject}, +i.e. \linkS4class{DBIDriver}, \linkS4class{DBIConnection}, +or a \linkS4class{DBIResult}} \item{...}{Other arguments to methods.} } \value{ -For objects of class \link[DBI:DBIDriver-class]{DBIDriver}, \code{dbGetInfo()} +For objects of class \linkS4class{DBIDriver}, \code{dbGetInfo()} returns a named list that contains at least the following components: \itemize{ @@ -22,7 +22,7 @@ that contains at least the following components: \item \code{client.version}: the version of the DBMS client library. } -For objects of class \link[DBI:DBIConnection-class]{DBIConnection}, \code{dbGetInfo()} +For objects of class \linkS4class{DBIConnection}, \code{dbGetInfo()} returns a named list that contains at least the following components: \itemize{ @@ -35,7 +35,7 @@ It must not contain a \code{password} component. Components that are not applicable should be set to \code{NA}. } -For objects of class \link[DBI:DBIResult-class]{DBIResult}, \code{dbGetInfo()} +For objects of class \linkS4class{DBIResult}, \code{dbGetInfo()} returns a named list that contains at least the following components: \itemize{ @@ -51,9 +51,10 @@ as returned by \code{\link[DBI:dbHasCompleted]{dbHasCompleted()}}. } } \description{ -Retrieves information on objects of class \link[DBI:DBIDriver-class]{DBIDriver}, -\link[DBI:DBIConnection-class]{DBIConnection} or \link[DBI:DBIResult-class]{DBIResult}. +Retrieves information on objects of class \linkS4class{DBIDriver}, +\linkS4class{DBIConnection} or \linkS4class{DBIResult}. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbGetInfo")} } \seealso{ Other DBIDriver generics: diff --git a/man/dbGetQuery-DatabaseConnectorDbiConnection-character-method.Rd b/man/dbGetQuery-DatabaseConnectorDbiConnection-character-method.Rd index 2c09b1e6..c759abdc 100644 --- a/man/dbGetQuery-DatabaseConnectorDbiConnection-character-method.Rd +++ b/man/dbGetQuery-DatabaseConnectorDbiConnection-character-method.Rd @@ -7,7 +7,7 @@ \S4method{dbGetQuery}{DatabaseConnectorDbiConnection,character}(conn, statement, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{statement}{a character string containing SQL.} @@ -32,6 +32,7 @@ For retrieving chunked/paged results or for passing query parameters, see \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, in particular the "The data retrieval flow" section. For retrieving results as an Arrow object, see \code{\link[DBI:dbGetQueryArrow]{dbGetQueryArrow()}}. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbGetQuery")} } \details{ This method is for \code{SELECT} queries only diff --git a/man/dbGetQuery-DatabaseConnectorJdbcConnection-character-method.Rd b/man/dbGetQuery-DatabaseConnectorJdbcConnection-character-method.Rd index fbfe65c7..73c5fcb4 100644 --- a/man/dbGetQuery-DatabaseConnectorJdbcConnection-character-method.Rd +++ b/man/dbGetQuery-DatabaseConnectorJdbcConnection-character-method.Rd @@ -7,7 +7,7 @@ \S4method{dbGetQuery}{DatabaseConnectorJdbcConnection,character}(conn, statement, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{statement}{a character string containing SQL.} @@ -32,6 +32,7 @@ For retrieving chunked/paged results or for passing query parameters, see \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, in particular the "The data retrieval flow" section. For retrieving results as an Arrow object, see \code{\link[DBI:dbGetQueryArrow]{dbGetQueryArrow()}}. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbGetQuery")} } \details{ This method is for \code{SELECT} queries only diff --git a/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd b/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd index 325f67e7..d6c5b4c8 100644 --- a/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbGetRowCount}{DatabaseConnectorDbiResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -33,6 +33,7 @@ and after calling \code{dbFetch()}. Returns the total number of rows actually fetched with calls to \code{\link[DBI:dbFetch]{dbFetch()}} for this result set. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbGetRowCount")} } \seealso{ Other DBIResult generics: diff --git a/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd b/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd index ece3f12e..2132cd14 100644 --- a/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbGetRowCount}{DatabaseConnectorJdbcResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -33,6 +33,7 @@ and after calling \code{dbFetch()}. Returns the total number of rows actually fetched with calls to \code{\link[DBI:dbFetch]{dbFetch()}} for this result set. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbGetRowCount")} } \seealso{ Other DBIResult generics: diff --git a/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd b/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd index 0677cd1e..8d78f320 100644 --- a/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbGetRowsAffected}{DatabaseConnectorDbiResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -28,6 +28,7 @@ and after the call to \code{dbFetch()}. This method returns the number of rows that were added, deleted, or updated by a data manipulation statement. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbGetRowsAffected")} } \seealso{ Other DBIResult generics: diff --git a/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd b/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd index bf978d4e..7b976480 100644 --- a/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbGetRowsAffected}{DatabaseConnectorJdbcResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -28,6 +28,7 @@ and after the call to \code{dbFetch()}. This method returns the number of rows that were added, deleted, or updated by a data manipulation statement. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbGetRowsAffected")} } \seealso{ Other DBIResult generics: diff --git a/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd b/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd index 2d91c763..79745b41 100644 --- a/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbGetStatement}{DatabaseConnectorDbiResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -20,6 +20,7 @@ either \code{\link[DBI:dbSendQuery]{dbSendQuery()}} or Returns the statement that was passed to \code{\link[DBI:dbSendQuery]{dbSendQuery()}} or \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbGetStatement")} } \seealso{ Other DBIResult generics: diff --git a/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd b/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd index a464f11e..116027d9 100644 --- a/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbGetStatement}{DatabaseConnectorJdbcResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -20,6 +20,7 @@ either \code{\link[DBI:dbSendQuery]{dbSendQuery()}} or Returns the statement that was passed to \code{\link[DBI:dbSendQuery]{dbSendQuery()}} or \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbGetStatement")} } \seealso{ Other DBIResult generics: diff --git a/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd b/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd index 5f1fb095..f4e2a050 100644 --- a/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbHasCompleted}{DatabaseConnectorDbiResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -24,6 +24,7 @@ This method returns if the operation has completed. A \code{SELECT} query is completed if all rows have been fetched. A data manipulation statement is always completed. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbHasCompleted")} } \seealso{ Other DBIResult generics: diff --git a/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd b/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd index d5de8d59..e51aacda 100644 --- a/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd @@ -7,7 +7,7 @@ \S4method{dbHasCompleted}{DatabaseConnectorJdbcResult}(res, ...) } \arguments{ -\item{res}{An object inheriting from \link[DBI:DBIResult-class]{DBIResult}.} +\item{res}{An object inheriting from \linkS4class{DBIResult}.} \item{...}{Other arguments passed on to methods.} } @@ -24,6 +24,7 @@ This method returns if the operation has completed. A \code{SELECT} query is completed if all rows have been fetched. A data manipulation statement is always completed. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbHasCompleted")} } \seealso{ Other DBIResult generics: diff --git a/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd b/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd index a4bce0af..38a0d863 100644 --- a/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd +++ b/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd @@ -7,9 +7,9 @@ \S4method{dbIsValid}{DatabaseConnectorDbiConnection}(dbObj, ...) } \arguments{ -\item{dbObj}{An object inheriting from \link[DBI:DBIObject-class]{DBIObject}, -i.e. \link[DBI:DBIDriver-class]{DBIDriver}, \link[DBI:DBIConnection-class]{DBIConnection}, -or a \link[DBI:DBIResult-class]{DBIResult}} +\item{dbObj}{An object inheriting from \linkS4class{DBIObject}, +i.e. \linkS4class{DBIDriver}, \linkS4class{DBIConnection}, +or a \linkS4class{DBIResult}} \item{...}{Other arguments to methods.} } @@ -17,14 +17,14 @@ or a \link[DBI:DBIResult-class]{DBIResult}} \code{dbIsValid()} returns a logical scalar, \code{TRUE} if the object specified by \code{dbObj} is valid, \code{FALSE} otherwise. -A \link[DBI:DBIConnection-class]{DBIConnection} object is initially valid, +A \linkS4class{DBIConnection} object is initially valid, and becomes invalid after disconnecting with \code{\link[DBI:dbDisconnect]{dbDisconnect()}}. For an invalid connection object (e.g., for some drivers if the object is saved to a file and then restored), the method also returns \code{FALSE}. -A \link[DBI:DBIResult-class]{DBIResult} object is valid after a call to \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, +A \linkS4class{DBIResult} object is valid after a call to \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, and stays valid even after all rows have been fetched; only clearing it with \code{\link[DBI:dbClearResult]{dbClearResult()}} invalidates it. -A \link[DBI:DBIResult-class]{DBIResult} object is also valid after a call to \code{\link[DBI:dbSendStatement]{dbSendStatement()}}, +A \linkS4class{DBIResult} object is also valid after a call to \code{\link[DBI:dbSendStatement]{dbSendStatement()}}, and stays valid after querying the number of rows affected; only clearing it with \code{\link[DBI:dbClearResult]{dbClearResult()}} invalidates it. If the connection to the database system is dropped (e.g., due to @@ -35,6 +35,7 @@ connectivity problems, server failure, etc.), \code{dbIsValid()} should return This generic tests whether a database object is still valid (i.e. it hasn't been disconnected or cleared). +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbIsValid")} } \seealso{ Other DBIDriver generics: diff --git a/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd b/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd index 46170627..63f50661 100644 --- a/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd +++ b/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd @@ -7,9 +7,9 @@ \S4method{dbIsValid}{DatabaseConnectorJdbcConnection}(dbObj, ...) } \arguments{ -\item{dbObj}{An object inheriting from \link[DBI:DBIObject-class]{DBIObject}, -i.e. \link[DBI:DBIDriver-class]{DBIDriver}, \link[DBI:DBIConnection-class]{DBIConnection}, -or a \link[DBI:DBIResult-class]{DBIResult}} +\item{dbObj}{An object inheriting from \linkS4class{DBIObject}, +i.e. \linkS4class{DBIDriver}, \linkS4class{DBIConnection}, +or a \linkS4class{DBIResult}} \item{...}{Other arguments to methods.} } @@ -17,14 +17,14 @@ or a \link[DBI:DBIResult-class]{DBIResult}} \code{dbIsValid()} returns a logical scalar, \code{TRUE} if the object specified by \code{dbObj} is valid, \code{FALSE} otherwise. -A \link[DBI:DBIConnection-class]{DBIConnection} object is initially valid, +A \linkS4class{DBIConnection} object is initially valid, and becomes invalid after disconnecting with \code{\link[DBI:dbDisconnect]{dbDisconnect()}}. For an invalid connection object (e.g., for some drivers if the object is saved to a file and then restored), the method also returns \code{FALSE}. -A \link[DBI:DBIResult-class]{DBIResult} object is valid after a call to \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, +A \linkS4class{DBIResult} object is valid after a call to \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, and stays valid even after all rows have been fetched; only clearing it with \code{\link[DBI:dbClearResult]{dbClearResult()}} invalidates it. -A \link[DBI:DBIResult-class]{DBIResult} object is also valid after a call to \code{\link[DBI:dbSendStatement]{dbSendStatement()}}, +A \linkS4class{DBIResult} object is also valid after a call to \code{\link[DBI:dbSendStatement]{dbSendStatement()}}, and stays valid after querying the number of rows affected; only clearing it with \code{\link[DBI:dbClearResult]{dbClearResult()}} invalidates it. If the connection to the database system is dropped (e.g., due to @@ -35,6 +35,7 @@ connectivity problems, server failure, etc.), \code{dbIsValid()} should return This generic tests whether a database object is still valid (i.e. it hasn't been disconnected or cleared). +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbIsValid")} } \seealso{ Other DBIDriver generics: diff --git a/man/dbListFields-DatabaseConnectorConnection-character-method.Rd b/man/dbListFields-DatabaseConnectorConnection-character-method.Rd index 9aa1cc58..aefe307e 100644 --- a/man/dbListFields-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbListFields-DatabaseConnectorConnection-character-method.Rd @@ -7,7 +7,7 @@ \S4method{dbListFields}{DatabaseConnectorConnection,character}(conn, name, databaseSchema = NULL, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{name}{The table name, passed on to \code{\link[DBI:dbQuoteIdentifier]{dbQuoteIdentifier()}}. Options are: @@ -35,6 +35,7 @@ The returned names are suitable for quoting with \code{dbQuoteIdentifier()}. \description{ Returns the field names of a remote table as a character vector. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbListFields")} } \details{ The \code{databaseSchema} argument is interpreted differently according to the different platforms: diff --git a/man/dbListTables-DatabaseConnectorConnection-method.Rd b/man/dbListTables-DatabaseConnectorConnection-method.Rd index 5aae0f73..2a4b54aa 100644 --- a/man/dbListTables-DatabaseConnectorConnection-method.Rd +++ b/man/dbListTables-DatabaseConnectorConnection-method.Rd @@ -7,7 +7,7 @@ \S4method{dbListTables}{DatabaseConnectorConnection}(conn, databaseSchema = NULL, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{databaseSchema}{The name of the database schema. See details for platform-specific details.} @@ -35,6 +35,7 @@ connection. This should include views and temporary objects, but not all database backends (in particular \pkg{RMariaDB} and \pkg{RMySQL}) support this. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbListTables")} } \details{ The \code{databaseSchema} argument is interpreted differently according to the different platforms: diff --git a/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd b/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd index ebf135e5..18a3178d 100644 --- a/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd @@ -7,7 +7,7 @@ \S4method{dbReadTable}{DatabaseConnectorConnection,character}(conn, name, databaseSchema = NULL, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{name}{The table name, passed on to \code{\link[DBI:dbQuoteIdentifier]{dbQuoteIdentifier()}}. Options are: @@ -59,6 +59,7 @@ a column to row names and converting the column names to valid R identifiers. Use \code{\link[DBI:dbReadTableArrow]{dbReadTableArrow()}} instead to obtain an Arrow object. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbReadTable")} } \details{ The \code{databaseSchema} argument is interpreted differently according to the different platforms: diff --git a/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd b/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd index 0133fc08..b45536e5 100644 --- a/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd +++ b/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd @@ -7,7 +7,7 @@ \S4method{dbRemoveTable}{DatabaseConnectorConnection,ANY}(conn, name, databaseSchema = NULL, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{name}{The table name, passed on to \code{\link[DBI:dbQuoteIdentifier]{dbQuoteIdentifier()}}. Options are: @@ -31,6 +31,7 @@ given verbatim, e.g. \code{SQL('"my_schema"."table_name"')} Remove a remote table (e.g., created by \code{\link[DBI:dbWriteTable]{dbWriteTable()}}) from the database. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbRemoveTable")} } \details{ The \code{databaseSchema} argument is interpreted differently according to the different platforms: diff --git a/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd b/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd index f245363c..4afb4c06 100644 --- a/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd +++ b/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd @@ -7,7 +7,7 @@ \S4method{dbSendQuery}{DatabaseConnectorDbiConnection,character}(conn, statement, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{statement}{a character string containing SQL.} @@ -16,7 +16,7 @@ } \value{ \code{dbSendQuery()} returns -an S4 object that inherits from \link[DBI:DBIResult-class]{DBIResult}. +an S4 object that inherits from \linkS4class{DBIResult}. The result set can be used with \code{\link[DBI:dbFetch]{dbFetch()}} to extract records. Once you have finished using a result, make sure to clear it with \code{\link[DBI:dbClearResult]{dbClearResult()}}. @@ -31,6 +31,7 @@ For interactive use, you should almost always prefer \code{\link[DBI:dbGetQuery] Use \code{\link[DBI:dbSendQueryArrow]{dbSendQueryArrow()}} or \code{\link[DBI:dbGetQueryArrow]{dbGetQueryArrow()}} instead to retrieve the results as an Arrow object. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbSendQuery")} } \details{ This method is for \code{SELECT} queries only. Some backends may diff --git a/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd b/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd index 306a15ea..62b80081 100644 --- a/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd +++ b/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd @@ -7,7 +7,7 @@ \S4method{dbSendQuery}{DatabaseConnectorJdbcConnection,character}(conn, statement, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{statement}{a character string containing SQL.} @@ -16,7 +16,7 @@ } \value{ \code{dbSendQuery()} returns -an S4 object that inherits from \link[DBI:DBIResult-class]{DBIResult}. +an S4 object that inherits from \linkS4class{DBIResult}. The result set can be used with \code{\link[DBI:dbFetch]{dbFetch()}} to extract records. Once you have finished using a result, make sure to clear it with \code{\link[DBI:dbClearResult]{dbClearResult()}}. @@ -31,6 +31,7 @@ For interactive use, you should almost always prefer \code{\link[DBI:dbGetQuery] Use \code{\link[DBI:dbSendQueryArrow]{dbSendQueryArrow()}} or \code{\link[DBI:dbGetQueryArrow]{dbGetQueryArrow()}} instead to retrieve the results as an Arrow object. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbSendQuery")} } \details{ This method is for \code{SELECT} queries only. Some backends may diff --git a/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd b/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd index cf988b88..41af77ea 100644 --- a/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd @@ -7,7 +7,7 @@ \S4method{dbSendStatement}{DatabaseConnectorConnection,character}(conn, statement, ...) } \arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by +\item{conn}{A \linkS4class{DBIConnection} object, as returned by \code{\link[DBI:dbConnect]{dbConnect()}}.} \item{statement}{a character string containing SQL.} @@ -16,7 +16,7 @@ } \value{ \code{dbSendStatement()} returns -an S4 object that inherits from \link[DBI:DBIResult-class]{DBIResult}. +an S4 object that inherits from \linkS4class{DBIResult}. The result set can be used with \code{\link[DBI:dbGetRowsAffected]{dbGetRowsAffected()}} to determine the number of rows affected by the query. Once you have finished using a result, make sure to clear it @@ -31,6 +31,7 @@ returned result object. You must also call \code{\link[DBI:dbClearResult]{dbCle that. For interactive use, you should almost always prefer \code{\link[DBI:dbExecute]{dbExecute()}}. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbSendStatement")} } \details{ \code{\link[DBI:dbSendStatement]{dbSendStatement()}} comes with a default implementation that simply diff --git a/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd b/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd deleted file mode 100644 index 75521ad0..00000000 --- a/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd +++ /dev/null @@ -1,89 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/DBI.R -\name{dbWriteTable,DatabaseConnectorConnection,ANY-method} -\alias{dbWriteTable,DatabaseConnectorConnection,ANY-method} -\title{Copy data frames to database tables} -\usage{ -\S4method{dbWriteTable}{DatabaseConnectorConnection,ANY}( - conn, - name, - value, - databaseSchema = NULL, - overwrite = FALSE, - append = FALSE, - temporary = FALSE, - ... -) -} -\arguments{ -\item{conn}{A \link[DBI:DBIConnection-class]{DBIConnection} object, as returned by -\code{\link[DBI:dbConnect]{dbConnect()}}.} - -\item{name}{The table name, passed on to \code{\link[DBI:dbQuoteIdentifier]{dbQuoteIdentifier()}}. Options are: -\itemize{ -\item a character string with the unquoted DBMS table name, -e.g. \code{"table_name"}, -\item a call to \code{\link[DBI:Id]{Id()}} with components to the fully qualified table name, -e.g. \code{Id(schema = "my_schema", table = "table_name")} -\item a call to \code{\link[DBI:SQL]{SQL()}} with the quoted and fully qualified table name -given verbatim, e.g. \code{SQL('"my_schema"."table_name"')} -}} - -\item{value}{A \link{data.frame} (or coercible to data.frame).} - -\item{databaseSchema}{The name of the database schema. See details for platform-specific details.} - -\item{overwrite}{Overwrite an existing table (if exists)?} - -\item{append}{Append to existing table?} - -\item{temporary}{Should the table created as a temp table?} - -\item{...}{Other parameters passed on to methods.} -} -\value{ -\code{dbWriteTable()} returns \code{TRUE}, invisibly. -} -\description{ -Writes, overwrites or appends a data frame to a database table, optionally -converting row names to a column and specifying SQL data types for fields. - -} -\details{ -The \code{databaseSchema} argument is interpreted differently according to the different platforms: -SQL Server and PDW: The databaseSchema schema should specify both the database and the schema, e.g. -'my_database.dbo'. Impala: the databaseSchema should specify the database. Oracle: -The databaseSchema should specify the Oracle 'user'. All other : The databaseSchema should -specify the schema. -} -\seealso{ -Other DBIConnection generics: -\code{\link[DBI]{DBIConnection-class}}, -\code{\link[DBI]{dbAppendTable}()}, -\code{\link[DBI]{dbAppendTableArrow}()}, -\code{\link[DBI]{dbCreateTable}()}, -\code{\link[DBI]{dbCreateTableArrow}()}, -\code{\link[DBI]{dbDataType}()}, -\code{\link[DBI]{dbDisconnect}()}, -\code{\link[DBI]{dbExecute}()}, -\code{\link[DBI]{dbExistsTable}()}, -\code{\link[DBI]{dbGetException}()}, -\code{\link[DBI]{dbGetInfo}()}, -\code{\link[DBI]{dbGetQuery}()}, -\code{\link[DBI]{dbGetQueryArrow}()}, -\code{\link[DBI]{dbIsReadOnly}()}, -\code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbListFields}()}, -\code{\link[DBI]{dbListObjects}()}, -\code{\link[DBI]{dbListResults}()}, -\code{\link[DBI]{dbListTables}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, -\code{\link[DBI]{dbReadTable}()}, -\code{\link[DBI]{dbReadTableArrow}()}, -\code{\link[DBI]{dbRemoveTable}()}, -\code{\link[DBI]{dbSendQuery}()}, -\code{\link[DBI]{dbSendQueryArrow}()}, -\code{\link[DBI]{dbSendStatement}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()}, -\code{\link[DBI]{dbWriteTableArrow}()} -} diff --git a/tests/testthat/test-MuckDb.R b/tests/testthat/test-MuckDb.R new file mode 100644 index 00000000..c7277c77 --- /dev/null +++ b/tests/testthat/test-MuckDb.R @@ -0,0 +1,32 @@ +test_that("connectMuckdb returns a mucked up connection", { + testthat::skip_if_not_installed("reticulate") + testthat::skip_if_not(reticulate::py_module_available("sqlglot")) + + platforms <- c("postgresql", "bigquery", "spark", "sql server", "impala", "snowflake", "redshift", "iris") + + for (plat in platforms) { + connectionDetails <- createConnectionDetails( + dbms = "muckdb", + connectionString = plat, + server = ":memory:" + ) + + conn <- DatabaseConnector::connect(connectionDetails) + testthat::expect_true(inherits(conn, "DatabaseConnectorConnection")) + + expect_equal(dbms(conn), plat) + renderTranslateExecuteSql(conn, "CREATE TABLE myTable AS SELECT 2 AS y; CREATE TABLE myTable2 AS SELECT 1 AS y") + result <- renderTranslateQuerySql(conn, "SELECT y FROM myTable") + testthat::expect_equal(result$y, 2) + + result <- renderTranslateQuerySql(conn, "SELECT y FROM myTable2") + testthat::expect_equal(result$y, 1) + + expect_error(renderTranslateQuerySql(conn, "SELE foo")) + expect_error(renderTranslateQuerySql(conn, "SELE foo")) + expect_error(querySql(conn, "SELE foo")) + expect_error(executeSql(conn, "SELE foo")) + } + + disconnect(conn) +})