From e7aacbf2e279557547e296edb7b415d6f65d089f Mon Sep 17 00:00:00 2001 From: Adam Black Date: Thu, 7 Dec 2023 12:19:09 +0100 Subject: [PATCH 1/3] change the way dplyr sql is rendered --- R/Connect.R | 33 +++++++++++++++++++++++++-------- R/DBI.R | 10 +++++----- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/R/Connect.R b/R/Connect.R index 783aece6..051379b5 100644 --- a/R/Connect.R +++ b/R/Connect.R @@ -778,7 +778,7 @@ connectUsingJdbcDriver <- function(jdbcDriver, abort(paste0("Unable to connect JDBC to ", url, " (", rJava::.jcall(x, "S", "getMessage"), ")")) } } - ensureDatabaseConnectorConnectionClassExists() + ensureDatabaseConnectorConnectionClassExists(dbms) class <- getClassDef("DatabaseConnectorJdbcConnection", where = class_cache, inherits = FALSE) if (is.null(class) || methods::isVirtualClass(class)) { setClass("DatabaseConnectorJdbcConnection", @@ -798,16 +798,30 @@ connectUsingJdbcDriver <- function(jdbcDriver, return(connection) } -ensureDatabaseConnectorConnectionClassExists <- function() { - class <- getClassDef("Microsoft SQL Server", where = class_cache, inherits = FALSE) +ensureDatabaseConnectorConnectionClassExists <- function(dbms) { + checkIfDbmsIsSupported(dbms) + dbmsClass <- switch(dbms, + "oracle" = "Oracle", + "postgresql" = "PqConnection", + "redshift" = "RedshiftConnection", + "sql server" = "Microsoft SQL Server", + "bigquery" = "BigQueryConnection", + "sqlite" = "SQLiteConnection", + "sqlite extended" = "SQLiteConnection", + "spark" = "Spark SQL", + "snowflake" = "Snowflake", + "synapse" = "Microsoft SQL Server", + "duckdb" = "duckdb_connection", + "blah") + + class <- getClassDef(dbmsClass, where = class_cache, inherits = FALSE) if (is.null(class) || methods::isVirtualClass(class)) { - setClass("Microsoft SQL Server", - where = class_cache) + setClass(dbmsClass, where = class_cache) } class <- getClassDef("DatabaseConnectorConnection", where = class_cache, inherits = FALSE) if (is.null(class) || methods::isVirtualClass(class)) { setClass("DatabaseConnectorConnection", - contains = c("Microsoft SQL Server", "DBIConnection"), + contains = c(dbmsClass, "DBIConnection"), slots = list( identifierQuote = "character", stringQuote = "character", @@ -822,7 +836,7 @@ connectUsingDbi <- function(dbiConnectionDetails) { dbms <- dbiConnectionDetails$dbms dbiConnectionDetails$dbms <- NULL dbiConnection <- do.call(DBI::dbConnect, dbiConnectionDetails) - ensureDatabaseConnectorConnectionClassExists() + ensureDatabaseConnectorConnectionClassExists(dbms) class <- getClassDef("DatabaseConnectorDbiConnection", where = class_cache, inherits = FALSE) if (is.null(class) || methods::isVirtualClass(class)) { setClass("DatabaseConnectorDbiConnection", @@ -956,7 +970,10 @@ dbms <- function(connection) { "RedshiftConnection" = "redshift", "BigQueryConnection" = "bigquery", "SQLiteConnection" = "sqlite", - "duckdb_connection" = "duckdb" + "duckdb_connection" = "duckdb", + "Spark Sql" = "spark", + "Snowflake" = "snowflake", + "Oracle" = "oracle" # add mappings from various DBI connection classes to SqlRender dbms here ) } diff --git a/R/DBI.R b/R/DBI.R index 669b8a0a..dba9e68f 100644 --- a/R/DBI.R +++ b/R/DBI.R @@ -208,7 +208,7 @@ setClass("DatabaseConnectorDbiResult", setMethod( "dbSendQuery", signature("DatabaseConnectorJdbcConnection", "character"), - function(conn, statement, translate = TRUE, ...) { + function(conn, statement, translate = FALSE, ...) { if (rJava::is.jnull(conn@jConnection)) { abort("Connection is closed") } @@ -258,7 +258,7 @@ setMethod( setMethod( "dbSendQuery", signature("DatabaseConnectorDbiConnection", "character"), - function(conn, statement, translate = TRUE, ...) { + function(conn, statement, translate = FALSE, ...) { if (translate) { statement <- translateStatement( sql = statement, @@ -426,7 +426,7 @@ setMethod("dbGetRowsAffected", "DatabaseConnectorDbiResult", function(res, ...) setMethod( "dbGetQuery", signature("DatabaseConnectorConnection", "character"), - function(conn, statement, translate = TRUE, ...) { + function(conn, statement, translate = FALSE, ...) { if (translate) { statement <- translateStatement( sql = statement, @@ -447,7 +447,7 @@ setMethod( setMethod( "dbSendStatement", signature("DatabaseConnectorConnection", "character"), - function(conn, statement, translate = TRUE, ...) { + function(conn, statement, translate = FALSE, ...) { if (translate) { statement <- translateStatement( sql = statement, @@ -472,7 +472,7 @@ setMethod( setMethod( "dbExecute", signature("DatabaseConnectorConnection", "character"), - function(conn, statement, translate = TRUE, ...) { + function(conn, statement, translate = FALSE, ...) { if (isDbplyrSql(statement) && dbms(conn) %in% c("oracle", "bigquery", "spark", "hive") && grepl("^UPDATE STATISTICS", statement)) { # These platforms don't support this, so SqlRender translates to an empty string, which causes errors down the line. return(0) From 04be4178d5d9c1e95d56cf7d9f7ca5ee397215ce Mon Sep 17 00:00:00 2001 From: Adam Black Date: Thu, 7 Dec 2023 12:35:17 +0100 Subject: [PATCH 2/3] update documentation --- ...ndTable-DatabaseConnectorConnection-character-method.Rd | 1 + man/dbClearResult-DatabaseConnectorDbiResult-method.Rd | 1 + man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd | 1 + man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd | 1 + man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd | 1 + man/dbCreateTable-DatabaseConnectorConnection-method.Rd | 1 + man/dbDisconnect-DatabaseConnectorConnection-method.Rd | 1 + ...Execute-DatabaseConnectorConnection-character-method.Rd | 3 ++- ...tsTable-DatabaseConnectorConnection-character-method.Rd | 1 + man/dbFetch-DatabaseConnectorDbiResult-method.Rd | 1 + man/dbFetch-DatabaseConnectorJdbcResult-method.Rd | 1 + man/dbGetInfo-DatabaseConnectorConnection-method.Rd | 1 + man/dbGetInfo-DatabaseConnectorDriver-method.Rd | 1 + ...etQuery-DatabaseConnectorConnection-character-method.Rd | 3 ++- man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd | 1 + man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd | 1 + man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd | 1 + ...dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd | 1 + man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd | 1 + man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd | 1 + man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd | 1 + man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd | 1 + man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd | 1 + man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd | 1 + ...tFields-DatabaseConnectorConnection-character-method.Rd | 1 + man/dbListTables-DatabaseConnectorConnection-method.Rd | 1 + ...adTable-DatabaseConnectorConnection-character-method.Rd | 1 + ...dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd | 1 + ...uery-DatabaseConnectorDbiConnection-character-method.Rd | 3 ++- ...ery-DatabaseConnectorJdbcConnection-character-method.Rd | 3 ++- ...atement-DatabaseConnectorConnection-character-method.Rd | 3 ++- ...iteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd} | 7 ++++--- 32 files changed, 40 insertions(+), 8 deletions(-) rename man/{dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd => dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd} (92%) diff --git a/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd b/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd index 24baee71..8b0104f1 100644 --- a/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd @@ -63,6 +63,7 @@ as a placeholder for prepared queries can override \code{\link[DBI:sqlAppendTabl Other backends (with different placeholders or with entirely different ways to create tables) need to override the \code{dbAppendTable()} method. +\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 8632febb..3bbc8955 100644 --- a/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd @@ -21,6 +21,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 c3d761ad..2571e59b 100644 --- a/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd @@ -21,6 +21,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 a72c0c80..79efa9b0 100644 --- a/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd @@ -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 b1cf575b..5c4e48d7 100644 --- a/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd @@ -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 788fa407..773cceab 100644 --- a/man/dbCreateTable-DatabaseConnectorConnection-method.Rd +++ b/man/dbCreateTable-DatabaseConnectorConnection-method.Rd @@ -64,6 +64,7 @@ Backends with a different SQL syntax can override \code{sqlCreateTable()}, backends with entirely different ways to create tables need to override this method. +\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 ae801cbc..a4bb2620 100644 --- a/man/dbDisconnect-DatabaseConnectorConnection-method.Rd +++ b/man/dbDisconnect-DatabaseConnectorConnection-method.Rd @@ -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-DatabaseConnectorConnection-character-method.Rd b/man/dbExecute-DatabaseConnectorConnection-character-method.Rd index a49460d7..bf4e66fd 100644 --- a/man/dbExecute-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbExecute-DatabaseConnectorConnection-character-method.Rd @@ -4,7 +4,7 @@ \alias{dbExecute,DatabaseConnectorConnection,character-method} \title{Execute an update statement, query number of rows affected, and then close result set} \usage{ -\S4method{dbExecute}{DatabaseConnectorConnection,character}(conn, statement, translate = TRUE, ...) +\S4method{dbExecute}{DatabaseConnectorConnection,character}(conn, statement, translate = FALSE, ...) } \arguments{ \item{conn}{A \linkS4class{DBIConnection} object, as returned by @@ -32,6 +32,7 @@ the result is always free-d 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 ac15c20a..7e102d11 100644 --- a/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd @@ -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 0da6ef19..331c3d03 100644 --- a/man/dbFetch-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbFetch-DatabaseConnectorDbiResult-method.Rd @@ -29,6 +29,7 @@ or zero rows. 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 a829fb4a..b192321e 100644 --- a/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd @@ -29,6 +29,7 @@ or zero rows. 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 a6b3833a..45bfb34b 100644 --- a/man/dbGetInfo-DatabaseConnectorConnection-method.Rd +++ b/man/dbGetInfo-DatabaseConnectorConnection-method.Rd @@ -54,6 +54,7 @@ as returned by \code{\link[DBI:dbHasCompleted]{dbHasCompleted()}}. 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 9f29460a..97c77c64 100644 --- a/man/dbGetInfo-DatabaseConnectorDriver-method.Rd +++ b/man/dbGetInfo-DatabaseConnectorDriver-method.Rd @@ -54,6 +54,7 @@ as returned by \code{\link[DBI:dbHasCompleted]{dbHasCompleted()}}. 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-DatabaseConnectorConnection-character-method.Rd b/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd index 88e29a6a..680d1dc8 100644 --- a/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd @@ -4,7 +4,7 @@ \alias{dbGetQuery,DatabaseConnectorConnection,character-method} \title{Send query, retrieve results and then clear result set} \usage{ -\S4method{dbGetQuery}{DatabaseConnectorConnection,character}(conn, statement, translate = TRUE, ...) +\S4method{dbGetQuery}{DatabaseConnectorConnection,character}(conn, statement, translate = FALSE, ...) } \arguments{ \item{conn}{A \linkS4class{DBIConnection} object, as returned by @@ -33,6 +33,7 @@ the result is always free-d by \code{\link[DBI:dbClearResult]{dbClearResult()}}. For retrieving chunked/paged results or for passing query parameters, see \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, in particular the "The data retrieval flow" section. +\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 66714830..2a8682a3 100644 --- a/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd @@ -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 cfac98ca..d829f8b4 100644 --- a/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd @@ -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 e655d81b..4b3eac6e 100644 --- a/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd @@ -25,6 +25,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 6e6a6a67..bbe60fa5 100644 --- a/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd @@ -25,6 +25,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 b99830f1..e4a9b8a7 100644 --- a/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd @@ -20,6 +20,7 @@ or \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. 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 464874cb..0ef6bb43 100644 --- a/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd @@ -20,6 +20,7 @@ or \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. 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 8a0988ee..c359f5aa 100644 --- a/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd @@ -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 c2db6f96..d2e4b702 100644 --- a/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd @@ -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 3179faec..36f2adcf 100644 --- a/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd +++ b/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd @@ -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 380a3da0..6fdab4d5 100644 --- a/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd +++ b/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd @@ -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 c05e345a..8f7ab093 100644 --- a/man/dbListFields-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbListFields-DatabaseConnectorConnection-character-method.Rd @@ -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 a8e3d7a1..c21cb8e2 100644 --- a/man/dbListTables-DatabaseConnectorConnection-method.Rd +++ b/man/dbListTables-DatabaseConnectorConnection-method.Rd @@ -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 9f621b1e..0362a755 100644 --- a/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd @@ -71,6 +71,7 @@ Reads a database table to a data frame, optionally converting a column to row names and converting the column names to valid R identifiers. +\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 3659ef6e..5b4cef27 100644 --- a/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd +++ b/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd @@ -44,6 +44,7 @@ can be created.} 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 f8f12694..7ba2260b 100644 --- a/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd +++ b/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd @@ -4,7 +4,7 @@ \alias{dbSendQuery,DatabaseConnectorDbiConnection,character-method} \title{Execute a query on a given database connection} \usage{ -\S4method{dbSendQuery}{DatabaseConnectorDbiConnection,character}(conn, statement, translate = TRUE, ...) +\S4method{dbSendQuery}{DatabaseConnectorDbiConnection,character}(conn, statement, translate = FALSE, ...) } \arguments{ \item{conn}{A \linkS4class{DBIConnection} object, as returned by @@ -31,6 +31,7 @@ then you must call \code{\link[DBI:dbClearResult]{dbClearResult()}} when you fin records you need. For interactive use, you should almost always prefer \code{\link[DBI:dbGetQuery]{dbGetQuery()}}. +\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 eba179a3..c7d040b6 100644 --- a/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd +++ b/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd @@ -4,7 +4,7 @@ \alias{dbSendQuery,DatabaseConnectorJdbcConnection,character-method} \title{Execute a query on a given database connection} \usage{ -\S4method{dbSendQuery}{DatabaseConnectorJdbcConnection,character}(conn, statement, translate = TRUE, ...) +\S4method{dbSendQuery}{DatabaseConnectorJdbcConnection,character}(conn, statement, translate = FALSE, ...) } \arguments{ \item{conn}{A \linkS4class{DBIConnection} object, as returned by @@ -31,6 +31,7 @@ then you must call \code{\link[DBI:dbClearResult]{dbClearResult()}} when you fin records you need. For interactive use, you should almost always prefer \code{\link[DBI:dbGetQuery]{dbGetQuery()}}. +\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 4551ffe4..a40812ae 100644 --- a/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd @@ -4,7 +4,7 @@ \alias{dbSendStatement,DatabaseConnectorConnection,character-method} \title{Execute a data manipulation statement on a given database connection} \usage{ -\S4method{dbSendStatement}{DatabaseConnectorConnection,character}(conn, statement, translate = TRUE, ...) +\S4method{dbSendStatement}{DatabaseConnectorConnection,character}(conn, statement, translate = FALSE, ...) } \arguments{ \item{conn}{A \linkS4class{DBIConnection} object, as returned by @@ -33,6 +33,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-ANY-method.Rd similarity index 92% rename from man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd rename to man/dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd index 8d8b6f25..f141da05 100644 --- a/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd +++ b/man/dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd @@ -1,10 +1,10 @@ % 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} +\name{dbWriteTable,DatabaseConnectorConnection,ANY,ANY-method} +\alias{dbWriteTable,DatabaseConnectorConnection,ANY,ANY-method} \title{Copy data frames to database tables} \usage{ -\S4method{dbWriteTable}{DatabaseConnectorConnection,ANY}( +\S4method{dbWriteTable}{DatabaseConnectorConnection,ANY,ANY}( conn, name, value, @@ -56,6 +56,7 @@ can be created.} 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. +\Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbWriteTable")} } \details{ The \code{databaseSchema} argument is interpreted differently according to the different platforms: From 1ab5908907dc3f0d66a321bf2118f4adba30e3af Mon Sep 17 00:00:00 2001 From: Adam Black Date: Thu, 7 Dec 2023 12:48:36 +0100 Subject: [PATCH 3/3] fix r check --- R/DBI.R | 4 +++- ...Connection-character-data.frame-method.Rd} | 6 +++--- tests/testthat/testthat-problems.rds | Bin 4791 -> 53536 bytes 3 files changed, 6 insertions(+), 4 deletions(-) rename man/{dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd => dbWriteTable-DatabaseConnectorConnection-character-data.frame-method.Rd} (93%) diff --git a/R/DBI.R b/R/DBI.R index dba9e68f..6cb13635 100644 --- a/R/DBI.R +++ b/R/DBI.R @@ -544,7 +544,9 @@ setMethod( #' @export setMethod( "dbWriteTable", - "DatabaseConnectorConnection", + c(conn = "DatabaseConnectorConnection", + name = "character", + value = "data.frame"), function(conn, name, value, databaseSchema = NULL, overwrite = FALSE, append = FALSE, temporary = FALSE, oracleTempSchema = NULL, tempEmulationSchema = getOption("sqlRenderTempEmulationSchema"), ...) { if (!is.null(oracleTempSchema) && oracleTempSchema != "") { diff --git a/man/dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd b/man/dbWriteTable-DatabaseConnectorConnection-character-data.frame-method.Rd similarity index 93% rename from man/dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd rename to man/dbWriteTable-DatabaseConnectorConnection-character-data.frame-method.Rd index f141da05..5fed935c 100644 --- a/man/dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd +++ b/man/dbWriteTable-DatabaseConnectorConnection-character-data.frame-method.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/DBI.R -\name{dbWriteTable,DatabaseConnectorConnection,ANY,ANY-method} -\alias{dbWriteTable,DatabaseConnectorConnection,ANY,ANY-method} +\name{dbWriteTable,DatabaseConnectorConnection,character,data.frame-method} +\alias{dbWriteTable,DatabaseConnectorConnection,character,data.frame-method} \title{Copy data frames to database tables} \usage{ -\S4method{dbWriteTable}{DatabaseConnectorConnection,ANY,ANY}( +\S4method{dbWriteTable}{DatabaseConnectorConnection,character,data.frame}( conn, name, value, diff --git a/tests/testthat/testthat-problems.rds b/tests/testthat/testthat-problems.rds index 4ff38fdcbcc0aea620a341c54957351391ab4a85..3b9e32b0d8c233e1e4c53734fb13e11d97831059 100644 GIT binary patch literal 53536 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 Pl$g~gYcBrSxbFV}c76}l literal 4791 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 K*52B+>;D0k&OAo|