From bb266602f2c11a6c9dbe7e8f212cfe58a53c9d55 Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 29 Feb 2024 12:08:47 +0100 Subject: [PATCH 01/20] initial support for InterSystems IRIS --- R/Connect.R | 35 +++++++++++++++++++++++++- R/DatabaseConnector.R | 5 ++++ R/RStudio.R | 2 +- R/Sql.R | 5 ++-- README.md | 1 + man-roxygen/Dbms.R | 1 + man-roxygen/DefaultConnectionDetails.R | 8 ++++++ 7 files changed, 53 insertions(+), 4 deletions(-) diff --git a/R/Connect.R b/R/Connect.R index 783aece6..fbe4740c 100644 --- a/R/Connect.R +++ b/R/Connect.R @@ -32,7 +32,8 @@ checkIfDbmsIsSupported <- function(dbms) { "spark", "snowflake", "synapse", - "duckdb" + "duckdb", + "iris" ) deprecated <- c( "hive", @@ -332,6 +333,8 @@ connectUsingJdbc <- function(connectionDetails) { return(connectSpark(connectionDetails)) } else if (dbms == "snowflake") { return(connectSnowflake(connectionDetails)) + } else if (dbms == "iris") { + return(connectIris(connectionDetails)) } else { abort("Something went wrong when trying to connect to ", dbms) } @@ -747,6 +750,36 @@ connectSqlite <- function(connectionDetails) { return(connection) } +connectIris <- function(connectionDetails) { + inform("Connecting using InterSystems IRIS driver") + jarPath <- findPathToJar("^intersystems-jdbc-.*\\.jar$", connectionDetails$pathToDriver) + driver <- getJbcDriverSingleton("com.intersystems.jdbc.IRISDriver", jarPath) + if (is.null(connectionDetails$connectionString()) || connectionDetails$connectionString() == "") { + if (is.null(connectionDetails$port())) { + port <- "1972" + } else { + port <- connectionDetails$port() + } + connectionString <- paste0("jdbc:IRIS://", connectionDetails$server(), ":", port, "/USER") # use a full connection string for nondefault database + if (!is.null(connectionDetails$extraSettings)) { + connectionString <- paste(connectionString, connectionDetails$extraSettings, sep = ";") + } + } else { + connectionString <- connectionDetails$connectionString() + } + if (is.null(connectionDetails$user())) { + connection <- connectUsingJdbcDriver(driver, connectionString, dbms = connectionDetails$dbms) + } else { + connection <- connectUsingJdbcDriver(driver, + connectionString, + user = connectionDetails$user(), + password = connectionDetails$password(), + dbms = connectionDetails$dbms + ) + } + return(connection) +} + connectUsingJdbcDriver <- function(jdbcDriver, url, identifierQuote = "'", diff --git a/R/DatabaseConnector.R b/R/DatabaseConnector.R index 8b64d33e..b37381dc 100644 --- a/R/DatabaseConnector.R +++ b/R/DatabaseConnector.R @@ -76,6 +76,11 @@ NULL #' For SQLite we actually don't use a JDBC driver. Instead, we use the RSQLite package, which can be installed #' using `install.packages("RSQLite")`. #' +#' InterSystems IRIS +#' +#' For InterSystems IRIS, download the driver [here](https://intersystems-community.github.io/iris-driver-distribution/), +#' or locate the intersystems-jdbc-.jar in the ./dev/java/lib/1.8/ folder of your IRIS installation. +#' NULL globalVars <- new.env() diff --git a/R/RStudio.R b/R/RStudio.R index f53c70cf..dc4c83f6 100644 --- a/R/RStudio.R +++ b/R/RStudio.R @@ -76,7 +76,7 @@ unregisterWithRStudio <- function(connection) { } hasCatalogs <- function(connection) { - return(dbms(connection) %in% c("pdw", "postgresql", "sql server", "synapse", "redshift", "snowflake", "spark", "bigquery", "duckdb")) + return(dbms(connection) %in% c("pdw", "postgresql", "sql server", "synapse", "redshift", "snowflake", "spark", "bigquery", "duckdb", "iris")) } listDatabaseConnectorColumns <- function(connection, diff --git a/R/Sql.R b/R/Sql.R index 7453de77..5928c72a 100644 --- a/R/Sql.R +++ b/R/Sql.R @@ -291,9 +291,10 @@ lowLevelExecuteSql.default <- function(connection, sql) { statement <- rJava::.jcall(connection@jConnection, "Ljava/sql/Statement;", "createStatement") on.exit(rJava::.jcall(statement, "V", "close")) - if (dbms(connection) == "spark") { + if ((dbms(connection) == "spark") || (dbms(connection) == "iris")) { # For some queries the DataBricks JDBC driver will throw an error saying no ROWCOUNT is returned - # when using executeLargeUpdate, so using execute instead. + # when using executeLargeUpdate, so using execute instead. + # Also use this approach for IRIS JDBC driver, which does not support executeLargeUpdate() directly. rJava::.jcall(statement, "Z", "execute", as.character(sql), check = FALSE) rowsAffected <- rJava::.jcall(statement, "I", "getUpdateCount", check = FALSE) if (rowsAffected == -1) { diff --git a/README.md b/README.md index 507db781..8b5a42cf 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Features - IBM Netezza - SQLite - Spark + - InterSystems IRIS - Statements for executing queries with - Error reporting to file - Progress reporting diff --git a/man-roxygen/Dbms.R b/man-roxygen/Dbms.R index 48ebe8c1..530a311d 100644 --- a/man-roxygen/Dbms.R +++ b/man-roxygen/Dbms.R @@ -11,4 +11,5 @@ #' - "sqlite extended" for SQLite with extended types (DATE and DATETIME) #' - "spark" for Spark #' - "snowflake" for Snowflake +#' - "iris" for InterSystems IRIS #' diff --git a/man-roxygen/DefaultConnectionDetails.R b/man-roxygen/DefaultConnectionDetails.R index 4f36919b..60d04ec1 100644 --- a/man-roxygen/DefaultConnectionDetails.R +++ b/man-roxygen/DefaultConnectionDetails.R @@ -131,6 +131,14 @@ #' - `user`. The user name used to access the server. #' - `password`. The password for that user. #' +#' InterSystems IRIS: +#' - `connectionString`. The connection string (e.g. starting with +#' 'jdbc:iris://host:port/namespace'). Alternatively, you can provide +#' values for `server` and `port`, in which case the default `USER` namespace +#' is used to connect. +#' - `user`. The user name used to access the server. +#' - `password`. The password for that user. +#' - `pathToDriver`. The path to the folder containing the InterSystems IRIS JDBC driver JAR file. #' #' ## Windows authentication for SQL Server: #' From 02b73bd00905a62511950254e7c0ea22f1393ec4 Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 29 Feb 2024 12:09:05 +0100 Subject: [PATCH 02/20] reran roxygen --- man/connect.Rd | 12 +++++++ man/createConnectionDetails.Rd | 12 +++++++ man/createDbiConnectionDetails.Rd | 1 + ...aseConnectorConnection-character-method.Rd | 21 +++++++----- ...esult-DatabaseConnectorDbiResult-method.Rd | 34 ++++++++++++++++--- ...sult-DatabaseConnectorJdbcResult-method.Rd | 34 ++++++++++++++++--- ...nInfo-DatabaseConnectorDbiResult-method.Rd | 4 +-- ...Info-DatabaseConnectorJdbcResult-method.Rd | 4 +-- ...able-DatabaseConnectorConnection-method.Rd | 15 +++++--- ...nect-DatabaseConnectorConnection-method.Rd | 10 +++++- ...aseConnectorConnection-character-method.Rd | 20 +++++++++-- ...aseConnectorConnection-character-method.Rd | 10 +++++- ...Fetch-DatabaseConnectorDbiResult-method.Rd | 21 +++++++++--- ...etch-DatabaseConnectorJdbcResult-method.Rd | 21 +++++++++--- ...Info-DatabaseConnectorConnection-method.Rd | 14 +++++--- ...bGetInfo-DatabaseConnectorDriver-method.Rd | 14 +++++--- ...aseConnectorConnection-character-method.Rd | 32 +++++++++++++---- ...Count-DatabaseConnectorDbiResult-method.Rd | 4 +-- ...ount-DatabaseConnectorJdbcResult-method.Rd | 4 +-- ...ected-DatabaseConnectorDbiResult-method.Rd | 13 +++++-- ...cted-DatabaseConnectorJdbcResult-method.Rd | 13 +++++-- ...ement-DatabaseConnectorDbiResult-method.Rd | 8 ++--- ...ment-DatabaseConnectorJdbcResult-method.Rd | 8 ++--- ...leted-DatabaseConnectorDbiResult-method.Rd | 23 +++++++++++-- ...eted-DatabaseConnectorJdbcResult-method.Rd | 23 +++++++++++-- ...d-DatabaseConnectorDbiConnection-method.Rd | 22 +++++++++--- ...-DatabaseConnectorJdbcConnection-method.Rd | 22 +++++++++--- ...aseConnectorConnection-character-method.Rd | 10 +++++- ...bles-DatabaseConnectorConnection-method.Rd | 14 ++++++-- ...aseConnectorConnection-character-method.Rd | 17 +++++++--- ...-DatabaseConnectorConnection-ANY-method.Rd | 10 +++++- ...ConnectorDbiConnection-character-method.Rd | 27 +++++++++++++-- ...onnectorJdbcConnection-character-method.Rd | 27 +++++++++++++-- ...aseConnectorConnection-character-method.Rd | 16 ++++++++- ...-DatabaseConnectorConnection-ANY-method.Rd | 12 +++++-- man/jdbcDrivers.Rd | 5 +++ 36 files changed, 444 insertions(+), 113 deletions(-) diff --git a/man/connect.Rd b/man/connect.Rd index 8fc72d43..531a331e 100644 --- a/man/connect.Rd +++ b/man/connect.Rd @@ -20,6 +20,7 @@ \item "sqlite extended" for SQLite with extended types (DATE and DATETIME) \item "spark" for Spark \item "snowflake" for Snowflake +\item "iris" for InterSystems IRIS }} \item{user}{The user name used to access the server.} @@ -181,6 +182,17 @@ Snowflake: \item \code{user}. The user name used to access the server. \item \code{password}. The password for that user. } + +InterSystems IRIS: +\itemize{ +\item \code{connectionString}. The connection string (e.g. starting with +'jdbc:iris://host:port/namespace'). Alternatively, you can provide +values for \code{server} and \code{port}, in which case the default \code{USER} namespace +is used to connect. +\item \code{user}. The user name used to access the server. +\item \code{password}. The password for that user. +\item \code{pathToDriver}. The path to the folder containing the InterSystems IRIS JDBC driver JAR file. +} } \subsection{Windows authentication for SQL Server:}{ diff --git a/man/createConnectionDetails.Rd b/man/createConnectionDetails.Rd index 11d7dcb4..40c7fd51 100644 --- a/man/createConnectionDetails.Rd +++ b/man/createConnectionDetails.Rd @@ -17,6 +17,7 @@ \item "sqlite extended" for SQLite with extended types (DATE and DATETIME) \item "spark" for Spark \item "snowflake" for Snowflake +\item "iris" for InterSystems IRIS }} \item{user}{The user name used to access the server.} @@ -176,6 +177,17 @@ Snowflake: \item \code{user}. The user name used to access the server. \item \code{password}. The password for that user. } + +InterSystems IRIS: +\itemize{ +\item \code{connectionString}. The connection string (e.g. starting with +'jdbc:iris://host:port/namespace'). Alternatively, you can provide +values for \code{server} and \code{port}, in which case the default \code{USER} namespace +is used to connect. +\item \code{user}. The user name used to access the server. +\item \code{password}. The password for that user. +\item \code{pathToDriver}. The path to the folder containing the InterSystems IRIS JDBC driver JAR file. +} } \subsection{Windows authentication for SQL Server:}{ diff --git a/man/createDbiConnectionDetails.Rd b/man/createDbiConnectionDetails.Rd index 82dc9423..50d597d1 100644 --- a/man/createDbiConnectionDetails.Rd +++ b/man/createDbiConnectionDetails.Rd @@ -20,6 +20,7 @@ createDbiConnectionDetails(dbms, drv, ...) \item "sqlite extended" for SQLite with extended types (DATE and DATETIME) \item "spark" for Spark \item "snowflake" for Snowflake +\item "iris" for InterSystems IRIS }} \item{drv}{An object that inherits from DBIDriver, or an existing DBIConnection object diff --git a/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd b/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd index 8b0104f1..3c0d95e7 100644 --- a/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd @@ -30,8 +30,7 @@ e.g. \code{Id(schema = "my_schema", table = "table_name")} given verbatim, e.g. \code{SQL('"my_schema"."table_name"')} }} -\item{value}{A data frame of values. The column names must be consistent -with those in the target table in the database.} +\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.} @@ -56,12 +55,8 @@ numeric. The \code{dbAppendTable()} method assumes that the table has been created beforehand, e.g. with \code{\link[DBI:dbCreateTable]{dbCreateTable()}}. The default implementation calls \code{\link[DBI:sqlAppendTableTemplate]{sqlAppendTableTemplate()}} and then -\code{\link[DBI:dbExecute]{dbExecute()}} with the \code{param} argument. Backends compliant to -ANSI SQL 99 which use \verb{?} as a placeholder for prepared queries don't need -to override it. Backends with a different SQL syntax which use \verb{?} -as a placeholder for prepared queries can override \code{\link[DBI:sqlAppendTable]{sqlAppendTable()}}. -Other backends (with different placeholders or with entirely different -ways to create tables) need to override the \code{dbAppendTable()} method. +\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")} } @@ -75,7 +70,9 @@ specify the schema. \seealso{ Other DBIConnection generics: \code{\link[DBI]{DBIConnection-class}}, +\code{\link[DBI]{dbAppendTableArrow}()}, \code{\link[DBI]{dbCreateTable}()}, +\code{\link[DBI]{dbCreateTableArrow}()}, \code{\link[DBI]{dbDataType}()}, \code{\link[DBI]{dbDisconnect}()}, \code{\link[DBI]{dbExecute}()}, @@ -83,15 +80,21 @@ Other DBIConnection generics: \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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd b/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd index 3bbc8955..61592f29 100644 --- a/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd @@ -13,8 +13,9 @@ } \value{ \code{dbClearResult()} returns \code{TRUE}, invisibly, for result sets obtained from -both \code{dbSendQuery()} -and \code{dbSendStatement()}. +\code{dbSendQuery()}, +\code{dbSendStatement()}, +or \code{dbSendQueryArrow()}, } \description{ Frees all resources (local and remote) associated with a result set. @@ -36,8 +37,31 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbIsValid}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbExecute}()}, +\code{\link[DBI]{dbGetRowsAffected}()}, +\code{\link[DBI]{dbSendStatement}()} } diff --git a/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd b/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd index 2571e59b..3c78a432 100644 --- a/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd @@ -13,8 +13,9 @@ } \value{ \code{dbClearResult()} returns \code{TRUE}, invisibly, for result sets obtained from -both \code{dbSendQuery()} -and \code{dbSendStatement()}. +\code{dbSendQuery()}, +\code{dbSendStatement()}, +or \code{dbSendQueryArrow()}, } \description{ Frees all resources (local and remote) associated with a result set. @@ -36,8 +37,31 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbIsValid}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbExecute}()}, +\code{\link[DBI]{dbGetRowsAffected}()}, +\code{\link[DBI]{dbSendStatement}()} } diff --git a/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd b/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd index 79efa9b0..2a16fe37 100644 --- a/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd @@ -43,8 +43,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd b/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd index 5c4e48d7..efca1adb 100644 --- a/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd @@ -43,8 +43,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbCreateTable-DatabaseConnectorConnection-method.Rd b/man/dbCreateTable-DatabaseConnectorConnection-method.Rd index 773cceab..63ba0927 100644 --- a/man/dbCreateTable-DatabaseConnectorConnection-method.Rd +++ b/man/dbCreateTable-DatabaseConnectorConnection-method.Rd @@ -59,10 +59,7 @@ can be created.} \description{ The default \code{dbCreateTable()} method calls \code{\link[DBI:sqlCreateTable]{sqlCreateTable()}} and \code{\link[DBI:dbExecute]{dbExecute()}}. -Backends compliant to ANSI SQL 99 don't need to override it. -Backends with a different SQL syntax can override \code{sqlCreateTable()}, -backends with entirely different ways to create tables need to -override this method. +Use \code{\link[DBI:dbCreateTableArrow]{dbCreateTableArrow()}} to create a table from an Arrow schema. \Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbCreateTable")} } @@ -77,6 +74,8 @@ specify the schema. Other DBIConnection generics: \code{\link[DBI]{DBIConnection-class}}, \code{\link[DBI]{dbAppendTable}()}, +\code{\link[DBI]{dbAppendTableArrow}()}, +\code{\link[DBI]{dbCreateTableArrow}()}, \code{\link[DBI]{dbDataType}()}, \code{\link[DBI]{dbDisconnect}()}, \code{\link[DBI]{dbExecute}()}, @@ -84,15 +83,21 @@ Other DBIConnection generics: \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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbDisconnect-DatabaseConnectorConnection-method.Rd b/man/dbDisconnect-DatabaseConnectorConnection-method.Rd index a4bb2620..f60a3cbb 100644 --- a/man/dbDisconnect-DatabaseConnectorConnection-method.Rd +++ b/man/dbDisconnect-DatabaseConnectorConnection-method.Rd @@ -23,22 +23,30 @@ resources (e.g., memory, sockets). 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbExecute-DatabaseConnectorConnection-character-method.Rd b/man/dbExecute-DatabaseConnectorConnection-character-method.Rd index b84f2b09..30c64d04 100644 --- a/man/dbExecute-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbExecute-DatabaseConnectorConnection-character-method.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/DBI.R \name{dbExecute,DatabaseConnectorConnection,character-method} \alias{dbExecute,DatabaseConnectorConnection,character-method} -\title{Execute an update statement, query number of rows affected, and then close result set} +\title{Change database state} \usage{ \S4method{dbExecute}{DatabaseConnectorConnection,character}(conn, statement, translate = TRUE, ...) } @@ -28,7 +28,7 @@ Executes a statement and returns the number of rows affected. \code{dbExecute()} comes with a default implementation (which should work with most backends) that calls \code{\link[DBI:dbSendStatement]{dbSendStatement()}}, then \code{\link[DBI:dbGetRowsAffected]{dbGetRowsAffected()}}, ensuring that -the result is always free-d by \code{\link[DBI:dbClearResult]{dbClearResult()}}. +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. @@ -47,22 +47,36 @@ For queries: \code{\link[DBI:dbSendQuery]{dbSendQuery()}} and \code{\link[DBI:db 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbGetRowsAffected}()}, +\code{\link[DBI]{dbSendStatement}()} } diff --git a/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd b/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd index 7e102d11..ca864ae9 100644 --- a/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd @@ -46,22 +46,30 @@ specify the schema. 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbFetch-DatabaseConnectorDbiResult-method.Rd b/man/dbFetch-DatabaseConnectorDbiResult-method.Rd index 331c3d03..d5c5c13a 100644 --- a/man/dbFetch-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbFetch-DatabaseConnectorDbiResult-method.Rd @@ -18,12 +18,14 @@ special values.} \item{...}{Other arguments passed on to methods.} } \value{ -\code{dbFetch()} always returns a \link{data.frame} -with as many rows as records were fetched and as many +\code{dbFetch()} always returns a \link{data.frame} with +as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value or has one or zero rows. +Passing \code{n = NA} is supported and returns an arbitrary number of rows (at least one) +as specified by the driver, but at most the remaining rows in the result set. } \description{ Fetch the next \code{n} elements (rows) from the result set and return them @@ -53,8 +55,17 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd b/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd index b192321e..a7d003ca 100644 --- a/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd @@ -18,12 +18,14 @@ special values.} \item{...}{Other arguments passed on to methods.} } \value{ -\code{dbFetch()} always returns a \link{data.frame} -with as many rows as records were fetched and as many +\code{dbFetch()} always returns a \link{data.frame} with +as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value or has one or zero rows. +Passing \code{n = NA} is supported and returns an arbitrary number of rows (at least one) +as specified by the driver, but at most the remaining rows in the result set. } \description{ Fetch the next \code{n} elements (rows) from the result set and return them @@ -53,8 +55,17 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbGetInfo-DatabaseConnectorConnection-method.Rd b/man/dbGetInfo-DatabaseConnectorConnection-method.Rd index 45bfb34b..2546173d 100644 --- a/man/dbGetInfo-DatabaseConnectorConnection-method.Rd +++ b/man/dbGetInfo-DatabaseConnectorConnection-method.Rd @@ -70,24 +70,32 @@ Other DBIDriver generics: 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} Other DBIResult generics: \code{\link[DBI]{DBIResult-class}}, @@ -101,8 +109,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbGetInfo-DatabaseConnectorDriver-method.Rd b/man/dbGetInfo-DatabaseConnectorDriver-method.Rd index 97c77c64..f16a2c4c 100644 --- a/man/dbGetInfo-DatabaseConnectorDriver-method.Rd +++ b/man/dbGetInfo-DatabaseConnectorDriver-method.Rd @@ -70,24 +70,32 @@ Other DBIDriver generics: 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} Other DBIResult generics: \code{\link[DBI]{DBIResult-class}}, @@ -101,8 +109,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd b/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd index c4856336..5c24a0d2 100644 --- a/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/DBI.R \name{dbGetQuery,DatabaseConnectorConnection,character-method} \alias{dbGetQuery,DatabaseConnectorConnection,character-method} -\title{Send query, retrieve results and then clear result set} +\title{Retrieve results from a query} \usage{ \S4method{dbGetQuery}{DatabaseConnectorConnection,character}(conn, statement, translate = TRUE, ...) } @@ -17,8 +17,8 @@ \item{...}{Other parameters passed on to methods.} } \value{ -\code{dbGetQuery()} always returns a \link{data.frame} -with as many rows as records were fetched and as many +\code{dbGetQuery()} always returns a \link{data.frame}, with +as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value or has one @@ -29,16 +29,17 @@ Returns the result of a query as a data frame. \code{dbGetQuery()} comes with a default implementation (which should work with most backends) that calls \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, then \code{\link[DBI:dbFetch]{dbFetch()}}, ensuring that -the result is always free-d by \code{\link[DBI:dbClearResult]{dbClearResult()}}. +the result is always freed 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. +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 (incl. other SQL statements that return a \code{SELECT}-alike result, -e. g. execution of a stored procedure or data manipulation queries +e.g., execution of a stored procedure or data manipulation queries like \verb{INSERT INTO ... RETURNING ...}). To execute a stored procedure that does not return a result set, use \code{\link[DBI:dbExecute]{dbExecute()}}. @@ -54,22 +55,41 @@ For updates: \code{\link[DBI:dbSendStatement]{dbSendStatement()}} and \code{\lin 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd b/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd index 2a8682a3..d6c5b4c8 100644 --- a/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd @@ -48,8 +48,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd b/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd index d829f8b4..2132cd14 100644 --- a/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd @@ -48,8 +48,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd b/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd index 4b3eac6e..8d78f320 100644 --- a/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd @@ -17,9 +17,12 @@ the number of rows affected by a data manipulation statement issued with \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. The value is available directly after the call and does not change after calling \code{\link[DBI:dbFetch]{dbFetch()}}. +\code{NA_integer_} or \code{NA_numeric_} are allowed if the number of rows affected is not known. + For queries issued with \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, zero is returned before and after the call to \code{dbFetch()}. +\code{NA} values are not allowed. } \description{ This method returns the number of rows that were added, deleted, or updated @@ -40,8 +43,12 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbExecute}()}, +\code{\link[DBI]{dbSendStatement}()} } diff --git a/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd b/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd index bbe60fa5..7b976480 100644 --- a/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd @@ -17,9 +17,12 @@ the number of rows affected by a data manipulation statement issued with \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. The value is available directly after the call and does not change after calling \code{\link[DBI:dbFetch]{dbFetch()}}. +\code{NA_integer_} or \code{NA_numeric_} are allowed if the number of rows affected is not known. + For queries issued with \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, zero is returned before and after the call to \code{dbFetch()}. +\code{NA} values are not allowed. } \description{ This method returns the number of rows that were added, deleted, or updated @@ -40,8 +43,12 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbExecute}()}, +\code{\link[DBI]{dbSendStatement}()} } diff --git a/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd b/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd index e4a9b8a7..79745b41 100644 --- a/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd @@ -13,8 +13,8 @@ } \value{ \code{dbGetStatement()} returns a string, the query used in -either \code{\link[DBI:dbSendQuery]{dbSendQuery()}} -or \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. +either \code{\link[DBI:dbSendQuery]{dbSendQuery()}} or +\code{\link[DBI:dbSendStatement]{dbSendStatement()}}. } \description{ Returns the statement that was passed to \code{\link[DBI:dbSendQuery]{dbSendQuery()}} @@ -35,8 +35,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd b/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd index 0ef6bb43..116027d9 100644 --- a/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd @@ -13,8 +13,8 @@ } \value{ \code{dbGetStatement()} returns a string, the query used in -either \code{\link[DBI:dbSendQuery]{dbSendQuery()}} -or \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. +either \code{\link[DBI:dbSendQuery]{dbSendQuery()}} or +\code{\link[DBI:dbSendStatement]{dbSendStatement()}}. } \description{ Returns the statement that was passed to \code{\link[DBI:dbSendQuery]{dbSendQuery()}} @@ -35,8 +35,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd b/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd index c359f5aa..f4e2a050 100644 --- a/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd @@ -39,8 +39,25 @@ Other DBIResult generics: \code{\link[DBI]{dbGetStatement}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbIsValid}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd b/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd index d2e4b702..e51aacda 100644 --- a/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd @@ -39,8 +39,25 @@ Other DBIResult generics: \code{\link[DBI]{dbGetStatement}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbIsValid}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd b/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd index 36f2adcf..38a0d863 100644 --- a/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd +++ b/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd @@ -51,7 +51,9 @@ Other DBIDriver generics: 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}()}, @@ -59,16 +61,22 @@ Other DBIConnection generics: \code{\link[DBI]{dbGetException}()}, \code{\link[DBI]{dbGetInfo}()}, \code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, \code{\link[DBI]{dbIsReadOnly}()}, \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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} Other DBIResult generics: \code{\link[DBI]{DBIResult-class}}, @@ -82,8 +90,14 @@ Other DBIResult generics: \code{\link[DBI]{dbGetStatement}()}, \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbHasCompleted}()} } diff --git a/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd b/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd index 6fdab4d5..63f50661 100644 --- a/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd +++ b/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd @@ -51,7 +51,9 @@ Other DBIDriver generics: 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}()}, @@ -59,16 +61,22 @@ Other DBIConnection generics: \code{\link[DBI]{dbGetException}()}, \code{\link[DBI]{dbGetInfo}()}, \code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, \code{\link[DBI]{dbIsReadOnly}()}, \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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} Other DBIResult generics: \code{\link[DBI]{DBIResult-class}}, @@ -82,8 +90,14 @@ Other DBIResult generics: \code{\link[DBI]{dbGetStatement}()}, \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbHasCompleted}()} } diff --git a/man/dbListFields-DatabaseConnectorConnection-character-method.Rd b/man/dbListFields-DatabaseConnectorConnection-character-method.Rd index 8f7ab093..aefe307e 100644 --- a/man/dbListFields-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbListFields-DatabaseConnectorConnection-character-method.Rd @@ -50,7 +50,9 @@ specify the schema. 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}()}, @@ -58,14 +60,20 @@ Other DBIConnection generics: \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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbListTables-DatabaseConnectorConnection-method.Rd b/man/dbListTables-DatabaseConnectorConnection-method.Rd index c21cb8e2..2a4b54aa 100644 --- a/man/dbListTables-DatabaseConnectorConnection-method.Rd +++ b/man/dbListTables-DatabaseConnectorConnection-method.Rd @@ -20,8 +20,8 @@ returns a character vector that enumerates all tables and views in the database. -Tables added with \code{\link[DBI:dbWriteTable]{dbWriteTable()}} -are part of the list. +Tables added with \code{\link[DBI:dbWriteTable]{dbWriteTable()}} are +part of the list. As soon a table is removed from the database, it is also removed from the list of database tables. @@ -48,7 +48,9 @@ specify the schema. 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}()}, @@ -56,14 +58,20 @@ Other DBIConnection generics: \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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd b/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd index 0362a755..9a6c2e7c 100644 --- a/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/DBI.R \name{dbReadTable,DatabaseConnectorConnection,character-method} \alias{dbReadTable,DatabaseConnectorConnection,character-method} -\title{Copy data frames from database tables} +\title{Read database tables as data frames} \usage{ \S4method{dbReadTable}{DatabaseConnectorConnection,character}( conn, @@ -39,8 +39,8 @@ can be created.} } \value{ \code{dbReadTable()} returns a data frame that contains the complete data -from the remote table, effectively the result of calling \code{\link[DBI:dbGetQuery]{dbGetQuery()}} -with \verb{SELECT * FROM }. +from the remote table, effectively the result of calling \code{\link[DBI:dbGetQuery]{dbGetQuery()}} with +\verb{SELECT * FROM }. An empty table is returned as a data frame with zero rows. @@ -70,6 +70,7 @@ If \code{check.names = FALSE}, the returned table has non-syntactic column names Reads a database table to a data frame, optionally converting 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")} } @@ -84,7 +85,9 @@ specify the schema. 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}()}, @@ -92,14 +95,20 @@ Other DBIConnection generics: \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]{dbReadTableArrow}()}, \code{\link[DBI]{dbRemoveTable}()}, \code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()}, \code{\link[DBI]{dbSendStatement}()}, -\code{\link[DBI]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd b/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd index 5b4cef27..528d76fd 100644 --- a/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd +++ b/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd @@ -57,7 +57,9 @@ specify the schema. 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}()}, @@ -65,14 +67,20 @@ Other DBIConnection generics: \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]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()}, \code{\link[DBI]{dbSendStatement}()}, -\code{\link[DBI]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd b/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd index 147b9a1e..67306fae 100644 --- a/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd +++ b/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd @@ -28,8 +28,10 @@ The \code{dbSendQuery()} method only submits and synchronously executes the SQL query to the database engine. It does \emph{not} extract any records --- for that you need to use the \code{\link[DBI:dbFetch]{dbFetch()}} method, and then you must call \code{\link[DBI:dbClearResult]{dbClearResult()}} when you finish fetching the -records you need. For interactive use, you should almost always prefer -\code{\link[DBI:dbGetQuery]{dbGetQuery()}}. +records you need. +For interactive use, you should almost always prefer \code{\link[DBI:dbGetQuery]{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")} } @@ -52,7 +54,9 @@ For updates: \code{\link[DBI:dbSendStatement]{dbSendStatement()}} and \code{\lin 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}()}, @@ -60,14 +64,31 @@ Other DBIConnection generics: \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]{dbSendQueryArrow}()}, \code{\link[DBI]{dbSendStatement}()}, -\code{\link[DBI]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd b/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd index 03e2951f..d3a85bea 100644 --- a/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd +++ b/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd @@ -28,8 +28,10 @@ The \code{dbSendQuery()} method only submits and synchronously executes the SQL query to the database engine. It does \emph{not} extract any records --- for that you need to use the \code{\link[DBI:dbFetch]{dbFetch()}} method, and then you must call \code{\link[DBI:dbClearResult]{dbClearResult()}} when you finish fetching the -records you need. For interactive use, you should almost always prefer -\code{\link[DBI:dbGetQuery]{dbGetQuery()}}. +records you need. +For interactive use, you should almost always prefer \code{\link[DBI:dbGetQuery]{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")} } @@ -52,7 +54,9 @@ For updates: \code{\link[DBI:dbSendStatement]{dbSendStatement()}} and \code{\lin 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}()}, @@ -60,14 +64,31 @@ Other DBIConnection generics: \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]{dbSendQueryArrow}()}, \code{\link[DBI]{dbSendStatement}()}, -\code{\link[DBI]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd b/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd index 6f1b9e61..e0b6a9b9 100644 --- a/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd @@ -46,7 +46,9 @@ For queries: \code{\link[DBI:dbSendQuery]{dbSendQuery()}} and \code{\link[DBI:db 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}()}, @@ -54,14 +56,26 @@ Other DBIConnection generics: \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]{dbWriteTable}()} +\code{\link[DBI]{dbSendQueryArrow}()}, +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbExecute}()}, +\code{\link[DBI]{dbGetRowsAffected}()} } diff --git a/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd b/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd index a5874645..04d6d5be 100644 --- a/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd +++ b/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd @@ -31,7 +31,7 @@ e.g. \code{Id(schema = "my_schema", table = "table_name")} given verbatim, e.g. \code{SQL('"my_schema"."table_name"')} }} -\item{value}{a \link{data.frame} (or coercible to data.frame).} +\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.} @@ -69,7 +69,9 @@ specify the schema. 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}()}, @@ -77,14 +79,20 @@ Other DBIConnection generics: \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]{dbSendStatement}()} +\code{\link[DBI]{dbSendQueryArrow}()}, +\code{\link[DBI]{dbSendStatement}()}, +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/jdbcDrivers.Rd b/man/jdbcDrivers.Rd index 22b80d0e..f6c0b0a3 100644 --- a/man/jdbcDrivers.Rd +++ b/man/jdbcDrivers.Rd @@ -27,5 +27,10 @@ your OS version, and click "GET IT NOW!'. Register, and you should be able to do \section{SQLite}{ For SQLite we actually don't use a JDBC driver. Instead, we use the RSQLite package, which can be installed using \code{install.packages("RSQLite")}. + +InterSystems IRIS + +For InterSystems IRIS, download the driver \href{https://intersystems-community.github.io/iris-driver-distribution/}{here}, +or locate the intersystems-jdbc-\if{html}{\out{}}.jar in the ./dev/java/lib/1.8/ folder of your IRIS installation. } From b2ffcf8502306950588ec1c23c980c382ed17825 Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Mon, 24 Jun 2024 13:20:42 +0200 Subject: [PATCH 03/20] use uppercase IRIS in JDBC URL --- man-roxygen/DefaultConnectionDetails.R | 2 +- man/connect.Rd | 2 +- man/createConnectionDetails.Rd | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/man-roxygen/DefaultConnectionDetails.R b/man-roxygen/DefaultConnectionDetails.R index 60d04ec1..9e7d4552 100644 --- a/man-roxygen/DefaultConnectionDetails.R +++ b/man-roxygen/DefaultConnectionDetails.R @@ -133,7 +133,7 @@ #' #' InterSystems IRIS: #' - `connectionString`. The connection string (e.g. starting with -#' 'jdbc:iris://host:port/namespace'). Alternatively, you can provide +#' 'jdbc:IRIS://host:port/namespace'). Alternatively, you can provide #' values for `server` and `port`, in which case the default `USER` namespace #' is used to connect. #' - `user`. The user name used to access the server. diff --git a/man/connect.Rd b/man/connect.Rd index 531a331e..fb14da39 100644 --- a/man/connect.Rd +++ b/man/connect.Rd @@ -186,7 +186,7 @@ Snowflake: InterSystems IRIS: \itemize{ \item \code{connectionString}. The connection string (e.g. starting with -'jdbc:iris://host:port/namespace'). Alternatively, you can provide +'jdbc:IRIS://host:port/namespace'). Alternatively, you can provide values for \code{server} and \code{port}, in which case the default \code{USER} namespace is used to connect. \item \code{user}. The user name used to access the server. diff --git a/man/createConnectionDetails.Rd b/man/createConnectionDetails.Rd index 40c7fd51..b3840a7e 100644 --- a/man/createConnectionDetails.Rd +++ b/man/createConnectionDetails.Rd @@ -181,7 +181,7 @@ Snowflake: InterSystems IRIS: \itemize{ \item \code{connectionString}. The connection string (e.g. starting with -'jdbc:iris://host:port/namespace'). Alternatively, you can provide +'jdbc:IRIS://host:port/namespace'). Alternatively, you can provide values for \code{server} and \code{port}, in which case the default \code{USER} namespace is used to connect. \item \code{user}. The user name used to access the server. From 05f1f311ae220f9cee199b4d28ca4d2e13e20a41 Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 29 Feb 2024 12:08:47 +0100 Subject: [PATCH 04/20] initial support for InterSystems IRIS --- R/Connect.R | 35 +++++++++++++++++++++++++- R/DatabaseConnector.R | 5 ++++ R/RStudio.R | 2 +- R/Sql.R | 5 ++-- README.md | 1 + man-roxygen/Dbms.R | 1 + man-roxygen/DefaultConnectionDetails.R | 8 ++++++ 7 files changed, 53 insertions(+), 4 deletions(-) diff --git a/R/Connect.R b/R/Connect.R index 783aece6..fbe4740c 100644 --- a/R/Connect.R +++ b/R/Connect.R @@ -32,7 +32,8 @@ checkIfDbmsIsSupported <- function(dbms) { "spark", "snowflake", "synapse", - "duckdb" + "duckdb", + "iris" ) deprecated <- c( "hive", @@ -332,6 +333,8 @@ connectUsingJdbc <- function(connectionDetails) { return(connectSpark(connectionDetails)) } else if (dbms == "snowflake") { return(connectSnowflake(connectionDetails)) + } else if (dbms == "iris") { + return(connectIris(connectionDetails)) } else { abort("Something went wrong when trying to connect to ", dbms) } @@ -747,6 +750,36 @@ connectSqlite <- function(connectionDetails) { return(connection) } +connectIris <- function(connectionDetails) { + inform("Connecting using InterSystems IRIS driver") + jarPath <- findPathToJar("^intersystems-jdbc-.*\\.jar$", connectionDetails$pathToDriver) + driver <- getJbcDriverSingleton("com.intersystems.jdbc.IRISDriver", jarPath) + if (is.null(connectionDetails$connectionString()) || connectionDetails$connectionString() == "") { + if (is.null(connectionDetails$port())) { + port <- "1972" + } else { + port <- connectionDetails$port() + } + connectionString <- paste0("jdbc:IRIS://", connectionDetails$server(), ":", port, "/USER") # use a full connection string for nondefault database + if (!is.null(connectionDetails$extraSettings)) { + connectionString <- paste(connectionString, connectionDetails$extraSettings, sep = ";") + } + } else { + connectionString <- connectionDetails$connectionString() + } + if (is.null(connectionDetails$user())) { + connection <- connectUsingJdbcDriver(driver, connectionString, dbms = connectionDetails$dbms) + } else { + connection <- connectUsingJdbcDriver(driver, + connectionString, + user = connectionDetails$user(), + password = connectionDetails$password(), + dbms = connectionDetails$dbms + ) + } + return(connection) +} + connectUsingJdbcDriver <- function(jdbcDriver, url, identifierQuote = "'", diff --git a/R/DatabaseConnector.R b/R/DatabaseConnector.R index 8b64d33e..b37381dc 100644 --- a/R/DatabaseConnector.R +++ b/R/DatabaseConnector.R @@ -76,6 +76,11 @@ NULL #' For SQLite we actually don't use a JDBC driver. Instead, we use the RSQLite package, which can be installed #' using `install.packages("RSQLite")`. #' +#' InterSystems IRIS +#' +#' For InterSystems IRIS, download the driver [here](https://intersystems-community.github.io/iris-driver-distribution/), +#' or locate the intersystems-jdbc-.jar in the ./dev/java/lib/1.8/ folder of your IRIS installation. +#' NULL globalVars <- new.env() diff --git a/R/RStudio.R b/R/RStudio.R index f53c70cf..dc4c83f6 100644 --- a/R/RStudio.R +++ b/R/RStudio.R @@ -76,7 +76,7 @@ unregisterWithRStudio <- function(connection) { } hasCatalogs <- function(connection) { - return(dbms(connection) %in% c("pdw", "postgresql", "sql server", "synapse", "redshift", "snowflake", "spark", "bigquery", "duckdb")) + return(dbms(connection) %in% c("pdw", "postgresql", "sql server", "synapse", "redshift", "snowflake", "spark", "bigquery", "duckdb", "iris")) } listDatabaseConnectorColumns <- function(connection, diff --git a/R/Sql.R b/R/Sql.R index 7453de77..5928c72a 100644 --- a/R/Sql.R +++ b/R/Sql.R @@ -291,9 +291,10 @@ lowLevelExecuteSql.default <- function(connection, sql) { statement <- rJava::.jcall(connection@jConnection, "Ljava/sql/Statement;", "createStatement") on.exit(rJava::.jcall(statement, "V", "close")) - if (dbms(connection) == "spark") { + if ((dbms(connection) == "spark") || (dbms(connection) == "iris")) { # For some queries the DataBricks JDBC driver will throw an error saying no ROWCOUNT is returned - # when using executeLargeUpdate, so using execute instead. + # when using executeLargeUpdate, so using execute instead. + # Also use this approach for IRIS JDBC driver, which does not support executeLargeUpdate() directly. rJava::.jcall(statement, "Z", "execute", as.character(sql), check = FALSE) rowsAffected <- rJava::.jcall(statement, "I", "getUpdateCount", check = FALSE) if (rowsAffected == -1) { diff --git a/README.md b/README.md index 507db781..8b5a42cf 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Features - IBM Netezza - SQLite - Spark + - InterSystems IRIS - Statements for executing queries with - Error reporting to file - Progress reporting diff --git a/man-roxygen/Dbms.R b/man-roxygen/Dbms.R index 48ebe8c1..530a311d 100644 --- a/man-roxygen/Dbms.R +++ b/man-roxygen/Dbms.R @@ -11,4 +11,5 @@ #' - "sqlite extended" for SQLite with extended types (DATE and DATETIME) #' - "spark" for Spark #' - "snowflake" for Snowflake +#' - "iris" for InterSystems IRIS #' diff --git a/man-roxygen/DefaultConnectionDetails.R b/man-roxygen/DefaultConnectionDetails.R index 4f36919b..60d04ec1 100644 --- a/man-roxygen/DefaultConnectionDetails.R +++ b/man-roxygen/DefaultConnectionDetails.R @@ -131,6 +131,14 @@ #' - `user`. The user name used to access the server. #' - `password`. The password for that user. #' +#' InterSystems IRIS: +#' - `connectionString`. The connection string (e.g. starting with +#' 'jdbc:iris://host:port/namespace'). Alternatively, you can provide +#' values for `server` and `port`, in which case the default `USER` namespace +#' is used to connect. +#' - `user`. The user name used to access the server. +#' - `password`. The password for that user. +#' - `pathToDriver`. The path to the folder containing the InterSystems IRIS JDBC driver JAR file. #' #' ## Windows authentication for SQL Server: #' From 0b7c045b5b8ee29472e828dad02c3489b7af7ed0 Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 29 Feb 2024 12:09:05 +0100 Subject: [PATCH 05/20] reran roxygen --- man/connect.Rd | 12 +++++++ man/createConnectionDetails.Rd | 12 +++++++ man/createDbiConnectionDetails.Rd | 1 + ...aseConnectorConnection-character-method.Rd | 21 +++++++----- ...esult-DatabaseConnectorDbiResult-method.Rd | 34 ++++++++++++++++--- ...sult-DatabaseConnectorJdbcResult-method.Rd | 34 ++++++++++++++++--- ...nInfo-DatabaseConnectorDbiResult-method.Rd | 4 +-- ...Info-DatabaseConnectorJdbcResult-method.Rd | 4 +-- ...able-DatabaseConnectorConnection-method.Rd | 15 +++++--- ...nect-DatabaseConnectorConnection-method.Rd | 10 +++++- ...aseConnectorConnection-character-method.Rd | 20 +++++++++-- ...aseConnectorConnection-character-method.Rd | 10 +++++- ...Fetch-DatabaseConnectorDbiResult-method.Rd | 21 +++++++++--- ...etch-DatabaseConnectorJdbcResult-method.Rd | 21 +++++++++--- ...Info-DatabaseConnectorConnection-method.Rd | 14 +++++--- ...bGetInfo-DatabaseConnectorDriver-method.Rd | 14 +++++--- ...aseConnectorConnection-character-method.Rd | 32 +++++++++++++---- ...Count-DatabaseConnectorDbiResult-method.Rd | 4 +-- ...ount-DatabaseConnectorJdbcResult-method.Rd | 4 +-- ...ected-DatabaseConnectorDbiResult-method.Rd | 13 +++++-- ...cted-DatabaseConnectorJdbcResult-method.Rd | 13 +++++-- ...ement-DatabaseConnectorDbiResult-method.Rd | 8 ++--- ...ment-DatabaseConnectorJdbcResult-method.Rd | 8 ++--- ...leted-DatabaseConnectorDbiResult-method.Rd | 23 +++++++++++-- ...eted-DatabaseConnectorJdbcResult-method.Rd | 23 +++++++++++-- ...d-DatabaseConnectorDbiConnection-method.Rd | 22 +++++++++--- ...-DatabaseConnectorJdbcConnection-method.Rd | 22 +++++++++--- ...aseConnectorConnection-character-method.Rd | 10 +++++- ...bles-DatabaseConnectorConnection-method.Rd | 14 ++++++-- ...aseConnectorConnection-character-method.Rd | 17 +++++++--- ...-DatabaseConnectorConnection-ANY-method.Rd | 10 +++++- ...ConnectorDbiConnection-character-method.Rd | 27 +++++++++++++-- ...onnectorJdbcConnection-character-method.Rd | 27 +++++++++++++-- ...aseConnectorConnection-character-method.Rd | 16 ++++++++- ...-DatabaseConnectorConnection-ANY-method.Rd | 12 +++++-- man/jdbcDrivers.Rd | 5 +++ 36 files changed, 444 insertions(+), 113 deletions(-) diff --git a/man/connect.Rd b/man/connect.Rd index 8fc72d43..531a331e 100644 --- a/man/connect.Rd +++ b/man/connect.Rd @@ -20,6 +20,7 @@ \item "sqlite extended" for SQLite with extended types (DATE and DATETIME) \item "spark" for Spark \item "snowflake" for Snowflake +\item "iris" for InterSystems IRIS }} \item{user}{The user name used to access the server.} @@ -181,6 +182,17 @@ Snowflake: \item \code{user}. The user name used to access the server. \item \code{password}. The password for that user. } + +InterSystems IRIS: +\itemize{ +\item \code{connectionString}. The connection string (e.g. starting with +'jdbc:iris://host:port/namespace'). Alternatively, you can provide +values for \code{server} and \code{port}, in which case the default \code{USER} namespace +is used to connect. +\item \code{user}. The user name used to access the server. +\item \code{password}. The password for that user. +\item \code{pathToDriver}. The path to the folder containing the InterSystems IRIS JDBC driver JAR file. +} } \subsection{Windows authentication for SQL Server:}{ diff --git a/man/createConnectionDetails.Rd b/man/createConnectionDetails.Rd index 11d7dcb4..40c7fd51 100644 --- a/man/createConnectionDetails.Rd +++ b/man/createConnectionDetails.Rd @@ -17,6 +17,7 @@ \item "sqlite extended" for SQLite with extended types (DATE and DATETIME) \item "spark" for Spark \item "snowflake" for Snowflake +\item "iris" for InterSystems IRIS }} \item{user}{The user name used to access the server.} @@ -176,6 +177,17 @@ Snowflake: \item \code{user}. The user name used to access the server. \item \code{password}. The password for that user. } + +InterSystems IRIS: +\itemize{ +\item \code{connectionString}. The connection string (e.g. starting with +'jdbc:iris://host:port/namespace'). Alternatively, you can provide +values for \code{server} and \code{port}, in which case the default \code{USER} namespace +is used to connect. +\item \code{user}. The user name used to access the server. +\item \code{password}. The password for that user. +\item \code{pathToDriver}. The path to the folder containing the InterSystems IRIS JDBC driver JAR file. +} } \subsection{Windows authentication for SQL Server:}{ diff --git a/man/createDbiConnectionDetails.Rd b/man/createDbiConnectionDetails.Rd index 82dc9423..50d597d1 100644 --- a/man/createDbiConnectionDetails.Rd +++ b/man/createDbiConnectionDetails.Rd @@ -20,6 +20,7 @@ createDbiConnectionDetails(dbms, drv, ...) \item "sqlite extended" for SQLite with extended types (DATE and DATETIME) \item "spark" for Spark \item "snowflake" for Snowflake +\item "iris" for InterSystems IRIS }} \item{drv}{An object that inherits from DBIDriver, or an existing DBIConnection object diff --git a/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd b/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd index 8b0104f1..3c0d95e7 100644 --- a/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbAppendTable-DatabaseConnectorConnection-character-method.Rd @@ -30,8 +30,7 @@ e.g. \code{Id(schema = "my_schema", table = "table_name")} given verbatim, e.g. \code{SQL('"my_schema"."table_name"')} }} -\item{value}{A data frame of values. The column names must be consistent -with those in the target table in the database.} +\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.} @@ -56,12 +55,8 @@ numeric. The \code{dbAppendTable()} method assumes that the table has been created beforehand, e.g. with \code{\link[DBI:dbCreateTable]{dbCreateTable()}}. The default implementation calls \code{\link[DBI:sqlAppendTableTemplate]{sqlAppendTableTemplate()}} and then -\code{\link[DBI:dbExecute]{dbExecute()}} with the \code{param} argument. Backends compliant to -ANSI SQL 99 which use \verb{?} as a placeholder for prepared queries don't need -to override it. Backends with a different SQL syntax which use \verb{?} -as a placeholder for prepared queries can override \code{\link[DBI:sqlAppendTable]{sqlAppendTable()}}. -Other backends (with different placeholders or with entirely different -ways to create tables) need to override the \code{dbAppendTable()} method. +\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")} } @@ -75,7 +70,9 @@ specify the schema. \seealso{ Other DBIConnection generics: \code{\link[DBI]{DBIConnection-class}}, +\code{\link[DBI]{dbAppendTableArrow}()}, \code{\link[DBI]{dbCreateTable}()}, +\code{\link[DBI]{dbCreateTableArrow}()}, \code{\link[DBI]{dbDataType}()}, \code{\link[DBI]{dbDisconnect}()}, \code{\link[DBI]{dbExecute}()}, @@ -83,15 +80,21 @@ Other DBIConnection generics: \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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd b/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd index 3bbc8955..61592f29 100644 --- a/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbClearResult-DatabaseConnectorDbiResult-method.Rd @@ -13,8 +13,9 @@ } \value{ \code{dbClearResult()} returns \code{TRUE}, invisibly, for result sets obtained from -both \code{dbSendQuery()} -and \code{dbSendStatement()}. +\code{dbSendQuery()}, +\code{dbSendStatement()}, +or \code{dbSendQueryArrow()}, } \description{ Frees all resources (local and remote) associated with a result set. @@ -36,8 +37,31 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbIsValid}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbExecute}()}, +\code{\link[DBI]{dbGetRowsAffected}()}, +\code{\link[DBI]{dbSendStatement}()} } diff --git a/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd b/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd index 2571e59b..3c78a432 100644 --- a/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbClearResult-DatabaseConnectorJdbcResult-method.Rd @@ -13,8 +13,9 @@ } \value{ \code{dbClearResult()} returns \code{TRUE}, invisibly, for result sets obtained from -both \code{dbSendQuery()} -and \code{dbSendStatement()}. +\code{dbSendQuery()}, +\code{dbSendStatement()}, +or \code{dbSendQueryArrow()}, } \description{ Frees all resources (local and remote) associated with a result set. @@ -36,8 +37,31 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbIsValid}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbExecute}()}, +\code{\link[DBI]{dbGetRowsAffected}()}, +\code{\link[DBI]{dbSendStatement}()} } diff --git a/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd b/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd index 79efa9b0..2a16fe37 100644 --- a/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbColumnInfo-DatabaseConnectorDbiResult-method.Rd @@ -43,8 +43,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd b/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd index 5c4e48d7..efca1adb 100644 --- a/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbColumnInfo-DatabaseConnectorJdbcResult-method.Rd @@ -43,8 +43,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbCreateTable-DatabaseConnectorConnection-method.Rd b/man/dbCreateTable-DatabaseConnectorConnection-method.Rd index 773cceab..63ba0927 100644 --- a/man/dbCreateTable-DatabaseConnectorConnection-method.Rd +++ b/man/dbCreateTable-DatabaseConnectorConnection-method.Rd @@ -59,10 +59,7 @@ can be created.} \description{ The default \code{dbCreateTable()} method calls \code{\link[DBI:sqlCreateTable]{sqlCreateTable()}} and \code{\link[DBI:dbExecute]{dbExecute()}}. -Backends compliant to ANSI SQL 99 don't need to override it. -Backends with a different SQL syntax can override \code{sqlCreateTable()}, -backends with entirely different ways to create tables need to -override this method. +Use \code{\link[DBI:dbCreateTableArrow]{dbCreateTableArrow()}} to create a table from an Arrow schema. \Sexpr[results=rd,stage=render]{DBI:::methods_as_rd("dbCreateTable")} } @@ -77,6 +74,8 @@ specify the schema. Other DBIConnection generics: \code{\link[DBI]{DBIConnection-class}}, \code{\link[DBI]{dbAppendTable}()}, +\code{\link[DBI]{dbAppendTableArrow}()}, +\code{\link[DBI]{dbCreateTableArrow}()}, \code{\link[DBI]{dbDataType}()}, \code{\link[DBI]{dbDisconnect}()}, \code{\link[DBI]{dbExecute}()}, @@ -84,15 +83,21 @@ Other DBIConnection generics: \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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbDisconnect-DatabaseConnectorConnection-method.Rd b/man/dbDisconnect-DatabaseConnectorConnection-method.Rd index a4bb2620..f60a3cbb 100644 --- a/man/dbDisconnect-DatabaseConnectorConnection-method.Rd +++ b/man/dbDisconnect-DatabaseConnectorConnection-method.Rd @@ -23,22 +23,30 @@ resources (e.g., memory, sockets). 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbExecute-DatabaseConnectorConnection-character-method.Rd b/man/dbExecute-DatabaseConnectorConnection-character-method.Rd index b84f2b09..30c64d04 100644 --- a/man/dbExecute-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbExecute-DatabaseConnectorConnection-character-method.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/DBI.R \name{dbExecute,DatabaseConnectorConnection,character-method} \alias{dbExecute,DatabaseConnectorConnection,character-method} -\title{Execute an update statement, query number of rows affected, and then close result set} +\title{Change database state} \usage{ \S4method{dbExecute}{DatabaseConnectorConnection,character}(conn, statement, translate = TRUE, ...) } @@ -28,7 +28,7 @@ Executes a statement and returns the number of rows affected. \code{dbExecute()} comes with a default implementation (which should work with most backends) that calls \code{\link[DBI:dbSendStatement]{dbSendStatement()}}, then \code{\link[DBI:dbGetRowsAffected]{dbGetRowsAffected()}}, ensuring that -the result is always free-d by \code{\link[DBI:dbClearResult]{dbClearResult()}}. +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. @@ -47,22 +47,36 @@ For queries: \code{\link[DBI:dbSendQuery]{dbSendQuery()}} and \code{\link[DBI:db 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbGetRowsAffected}()}, +\code{\link[DBI]{dbSendStatement}()} } diff --git a/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd b/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd index 7e102d11..ca864ae9 100644 --- a/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbExistsTable-DatabaseConnectorConnection-character-method.Rd @@ -46,22 +46,30 @@ specify the schema. 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbFetch-DatabaseConnectorDbiResult-method.Rd b/man/dbFetch-DatabaseConnectorDbiResult-method.Rd index 331c3d03..d5c5c13a 100644 --- a/man/dbFetch-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbFetch-DatabaseConnectorDbiResult-method.Rd @@ -18,12 +18,14 @@ special values.} \item{...}{Other arguments passed on to methods.} } \value{ -\code{dbFetch()} always returns a \link{data.frame} -with as many rows as records were fetched and as many +\code{dbFetch()} always returns a \link{data.frame} with +as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value or has one or zero rows. +Passing \code{n = NA} is supported and returns an arbitrary number of rows (at least one) +as specified by the driver, but at most the remaining rows in the result set. } \description{ Fetch the next \code{n} elements (rows) from the result set and return them @@ -53,8 +55,17 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd b/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd index b192321e..a7d003ca 100644 --- a/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbFetch-DatabaseConnectorJdbcResult-method.Rd @@ -18,12 +18,14 @@ special values.} \item{...}{Other arguments passed on to methods.} } \value{ -\code{dbFetch()} always returns a \link{data.frame} -with as many rows as records were fetched and as many +\code{dbFetch()} always returns a \link{data.frame} with +as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value or has one or zero rows. +Passing \code{n = NA} is supported and returns an arbitrary number of rows (at least one) +as specified by the driver, but at most the remaining rows in the result set. } \description{ Fetch the next \code{n} elements (rows) from the result set and return them @@ -53,8 +55,17 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbGetInfo-DatabaseConnectorConnection-method.Rd b/man/dbGetInfo-DatabaseConnectorConnection-method.Rd index 45bfb34b..2546173d 100644 --- a/man/dbGetInfo-DatabaseConnectorConnection-method.Rd +++ b/man/dbGetInfo-DatabaseConnectorConnection-method.Rd @@ -70,24 +70,32 @@ Other DBIDriver generics: 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} Other DBIResult generics: \code{\link[DBI]{DBIResult-class}}, @@ -101,8 +109,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbGetInfo-DatabaseConnectorDriver-method.Rd b/man/dbGetInfo-DatabaseConnectorDriver-method.Rd index 97c77c64..f16a2c4c 100644 --- a/man/dbGetInfo-DatabaseConnectorDriver-method.Rd +++ b/man/dbGetInfo-DatabaseConnectorDriver-method.Rd @@ -70,24 +70,32 @@ Other DBIDriver generics: 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} Other DBIResult generics: \code{\link[DBI]{DBIResult-class}}, @@ -101,8 +109,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd b/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd index c4856336..5c24a0d2 100644 --- a/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbGetQuery-DatabaseConnectorConnection-character-method.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/DBI.R \name{dbGetQuery,DatabaseConnectorConnection,character-method} \alias{dbGetQuery,DatabaseConnectorConnection,character-method} -\title{Send query, retrieve results and then clear result set} +\title{Retrieve results from a query} \usage{ \S4method{dbGetQuery}{DatabaseConnectorConnection,character}(conn, statement, translate = TRUE, ...) } @@ -17,8 +17,8 @@ \item{...}{Other parameters passed on to methods.} } \value{ -\code{dbGetQuery()} always returns a \link{data.frame} -with as many rows as records were fetched and as many +\code{dbGetQuery()} always returns a \link{data.frame}, with +as many rows as records were fetched and as many columns as fields in the result set, even if the result is a single value or has one @@ -29,16 +29,17 @@ Returns the result of a query as a data frame. \code{dbGetQuery()} comes with a default implementation (which should work with most backends) that calls \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, then \code{\link[DBI:dbFetch]{dbFetch()}}, ensuring that -the result is always free-d by \code{\link[DBI:dbClearResult]{dbClearResult()}}. +the result is always freed 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. +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 (incl. other SQL statements that return a \code{SELECT}-alike result, -e. g. execution of a stored procedure or data manipulation queries +e.g., execution of a stored procedure or data manipulation queries like \verb{INSERT INTO ... RETURNING ...}). To execute a stored procedure that does not return a result set, use \code{\link[DBI:dbExecute]{dbExecute()}}. @@ -54,22 +55,41 @@ For updates: \code{\link[DBI:dbSendStatement]{dbSendStatement()}} and \code{\lin 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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd b/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd index 2a8682a3..d6c5b4c8 100644 --- a/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetRowCount-DatabaseConnectorDbiResult-method.Rd @@ -48,8 +48,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd b/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd index d829f8b4..2132cd14 100644 --- a/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetRowCount-DatabaseConnectorJdbcResult-method.Rd @@ -48,8 +48,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd b/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd index 4b3eac6e..8d78f320 100644 --- a/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetRowsAffected-DatabaseConnectorDbiResult-method.Rd @@ -17,9 +17,12 @@ the number of rows affected by a data manipulation statement issued with \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. The value is available directly after the call and does not change after calling \code{\link[DBI:dbFetch]{dbFetch()}}. +\code{NA_integer_} or \code{NA_numeric_} are allowed if the number of rows affected is not known. + For queries issued with \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, zero is returned before and after the call to \code{dbFetch()}. +\code{NA} values are not allowed. } \description{ This method returns the number of rows that were added, deleted, or updated @@ -40,8 +43,12 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbExecute}()}, +\code{\link[DBI]{dbSendStatement}()} } diff --git a/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd b/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd index bbe60fa5..7b976480 100644 --- a/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetRowsAffected-DatabaseConnectorJdbcResult-method.Rd @@ -17,9 +17,12 @@ the number of rows affected by a data manipulation statement issued with \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. The value is available directly after the call and does not change after calling \code{\link[DBI:dbFetch]{dbFetch()}}. +\code{NA_integer_} or \code{NA_numeric_} are allowed if the number of rows affected is not known. + For queries issued with \code{\link[DBI:dbSendQuery]{dbSendQuery()}}, zero is returned before and after the call to \code{dbFetch()}. +\code{NA} values are not allowed. } \description{ This method returns the number of rows that were added, deleted, or updated @@ -40,8 +43,12 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbExecute}()}, +\code{\link[DBI]{dbSendStatement}()} } diff --git a/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd b/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd index e4a9b8a7..79745b41 100644 --- a/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbGetStatement-DatabaseConnectorDbiResult-method.Rd @@ -13,8 +13,8 @@ } \value{ \code{dbGetStatement()} returns a string, the query used in -either \code{\link[DBI:dbSendQuery]{dbSendQuery()}} -or \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. +either \code{\link[DBI:dbSendQuery]{dbSendQuery()}} or +\code{\link[DBI:dbSendStatement]{dbSendStatement()}}. } \description{ Returns the statement that was passed to \code{\link[DBI:dbSendQuery]{dbSendQuery()}} @@ -35,8 +35,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd b/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd index 0ef6bb43..116027d9 100644 --- a/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbGetStatement-DatabaseConnectorJdbcResult-method.Rd @@ -13,8 +13,8 @@ } \value{ \code{dbGetStatement()} returns a string, the query used in -either \code{\link[DBI:dbSendQuery]{dbSendQuery()}} -or \code{\link[DBI:dbSendStatement]{dbSendStatement()}}. +either \code{\link[DBI:dbSendQuery]{dbSendQuery()}} or +\code{\link[DBI:dbSendStatement]{dbSendStatement()}}. } \description{ Returns the statement that was passed to \code{\link[DBI:dbSendQuery]{dbSendQuery()}} @@ -35,8 +35,6 @@ Other DBIResult generics: \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} } diff --git a/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd b/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd index c359f5aa..f4e2a050 100644 --- a/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd +++ b/man/dbHasCompleted-DatabaseConnectorDbiResult-method.Rd @@ -39,8 +39,25 @@ Other DBIResult generics: \code{\link[DBI]{dbGetStatement}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbIsValid}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd b/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd index d2e4b702..e51aacda 100644 --- a/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd +++ b/man/dbHasCompleted-DatabaseConnectorJdbcResult-method.Rd @@ -39,8 +39,25 @@ Other DBIResult generics: \code{\link[DBI]{dbGetStatement}()}, \code{\link[DBI]{dbIsReadOnly}()}, \code{\link[DBI]{dbIsValid}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbIsValid}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd b/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd index 36f2adcf..38a0d863 100644 --- a/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd +++ b/man/dbIsValid-DatabaseConnectorDbiConnection-method.Rd @@ -51,7 +51,9 @@ Other DBIDriver generics: 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}()}, @@ -59,16 +61,22 @@ Other DBIConnection generics: \code{\link[DBI]{dbGetException}()}, \code{\link[DBI]{dbGetInfo}()}, \code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, \code{\link[DBI]{dbIsReadOnly}()}, \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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} Other DBIResult generics: \code{\link[DBI]{DBIResult-class}}, @@ -82,8 +90,14 @@ Other DBIResult generics: \code{\link[DBI]{dbGetStatement}()}, \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbHasCompleted}()} } diff --git a/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd b/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd index 6fdab4d5..63f50661 100644 --- a/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd +++ b/man/dbIsValid-DatabaseConnectorJdbcConnection-method.Rd @@ -51,7 +51,9 @@ Other DBIDriver generics: 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}()}, @@ -59,16 +61,22 @@ Other DBIConnection generics: \code{\link[DBI]{dbGetException}()}, \code{\link[DBI]{dbGetInfo}()}, \code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, \code{\link[DBI]{dbIsReadOnly}()}, \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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} Other DBIResult generics: \code{\link[DBI]{DBIResult-class}}, @@ -82,8 +90,14 @@ Other DBIResult generics: \code{\link[DBI]{dbGetStatement}()}, \code{\link[DBI]{dbHasCompleted}()}, \code{\link[DBI]{dbIsReadOnly}()}, -\code{\link[DBI]{dbQuoteIdentifier}()}, \code{\link[DBI]{dbQuoteLiteral}()}, -\code{\link[DBI]{dbQuoteString}()}, -\code{\link[DBI]{dbUnquoteIdentifier}()} +\code{\link[DBI]{dbQuoteString}()} + +Other DBIResultArrow generics: +\code{\link[DBI]{DBIResultArrow-class}}, +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbHasCompleted}()} } diff --git a/man/dbListFields-DatabaseConnectorConnection-character-method.Rd b/man/dbListFields-DatabaseConnectorConnection-character-method.Rd index 8f7ab093..aefe307e 100644 --- a/man/dbListFields-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbListFields-DatabaseConnectorConnection-character-method.Rd @@ -50,7 +50,9 @@ specify the schema. 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}()}, @@ -58,14 +60,20 @@ Other DBIConnection generics: \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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbListTables-DatabaseConnectorConnection-method.Rd b/man/dbListTables-DatabaseConnectorConnection-method.Rd index c21cb8e2..2a4b54aa 100644 --- a/man/dbListTables-DatabaseConnectorConnection-method.Rd +++ b/man/dbListTables-DatabaseConnectorConnection-method.Rd @@ -20,8 +20,8 @@ returns a character vector that enumerates all tables and views in the database. -Tables added with \code{\link[DBI:dbWriteTable]{dbWriteTable()}} -are part of the list. +Tables added with \code{\link[DBI:dbWriteTable]{dbWriteTable()}} are +part of the list. As soon a table is removed from the database, it is also removed from the list of database tables. @@ -48,7 +48,9 @@ specify the schema. 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}()}, @@ -56,14 +58,20 @@ Other DBIConnection generics: \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]{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]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd b/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd index 0362a755..9a6c2e7c 100644 --- a/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbReadTable-DatabaseConnectorConnection-character-method.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/DBI.R \name{dbReadTable,DatabaseConnectorConnection,character-method} \alias{dbReadTable,DatabaseConnectorConnection,character-method} -\title{Copy data frames from database tables} +\title{Read database tables as data frames} \usage{ \S4method{dbReadTable}{DatabaseConnectorConnection,character}( conn, @@ -39,8 +39,8 @@ can be created.} } \value{ \code{dbReadTable()} returns a data frame that contains the complete data -from the remote table, effectively the result of calling \code{\link[DBI:dbGetQuery]{dbGetQuery()}} -with \verb{SELECT * FROM }. +from the remote table, effectively the result of calling \code{\link[DBI:dbGetQuery]{dbGetQuery()}} with +\verb{SELECT * FROM }. An empty table is returned as a data frame with zero rows. @@ -70,6 +70,7 @@ If \code{check.names = FALSE}, the returned table has non-syntactic column names Reads a database table to a data frame, optionally converting 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")} } @@ -84,7 +85,9 @@ specify the schema. 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}()}, @@ -92,14 +95,20 @@ Other DBIConnection generics: \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]{dbReadTableArrow}()}, \code{\link[DBI]{dbRemoveTable}()}, \code{\link[DBI]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()}, \code{\link[DBI]{dbSendStatement}()}, -\code{\link[DBI]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd b/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd index 5b4cef27..528d76fd 100644 --- a/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd +++ b/man/dbRemoveTable-DatabaseConnectorConnection-ANY-method.Rd @@ -57,7 +57,9 @@ specify the schema. 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}()}, @@ -65,14 +67,20 @@ Other DBIConnection generics: \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]{dbSendQuery}()}, +\code{\link[DBI]{dbSendQueryArrow}()}, \code{\link[DBI]{dbSendStatement}()}, -\code{\link[DBI]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd b/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd index 147b9a1e..67306fae 100644 --- a/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd +++ b/man/dbSendQuery-DatabaseConnectorDbiConnection-character-method.Rd @@ -28,8 +28,10 @@ The \code{dbSendQuery()} method only submits and synchronously executes the SQL query to the database engine. It does \emph{not} extract any records --- for that you need to use the \code{\link[DBI:dbFetch]{dbFetch()}} method, and then you must call \code{\link[DBI:dbClearResult]{dbClearResult()}} when you finish fetching the -records you need. For interactive use, you should almost always prefer -\code{\link[DBI:dbGetQuery]{dbGetQuery()}}. +records you need. +For interactive use, you should almost always prefer \code{\link[DBI:dbGetQuery]{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")} } @@ -52,7 +54,9 @@ For updates: \code{\link[DBI:dbSendStatement]{dbSendStatement()}} and \code{\lin 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}()}, @@ -60,14 +64,31 @@ Other DBIConnection generics: \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]{dbSendQueryArrow}()}, \code{\link[DBI]{dbSendStatement}()}, -\code{\link[DBI]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd b/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd index 03e2951f..d3a85bea 100644 --- a/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd +++ b/man/dbSendQuery-DatabaseConnectorJdbcConnection-character-method.Rd @@ -28,8 +28,10 @@ The \code{dbSendQuery()} method only submits and synchronously executes the SQL query to the database engine. It does \emph{not} extract any records --- for that you need to use the \code{\link[DBI:dbFetch]{dbFetch()}} method, and then you must call \code{\link[DBI:dbClearResult]{dbClearResult()}} when you finish fetching the -records you need. For interactive use, you should almost always prefer -\code{\link[DBI:dbGetQuery]{dbGetQuery()}}. +records you need. +For interactive use, you should almost always prefer \code{\link[DBI:dbGetQuery]{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")} } @@ -52,7 +54,9 @@ For updates: \code{\link[DBI:dbSendStatement]{dbSendStatement()}} and \code{\lin 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}()}, @@ -60,14 +64,31 @@ Other DBIConnection generics: \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]{dbSendQueryArrow}()}, \code{\link[DBI]{dbSendStatement}()}, -\code{\link[DBI]{dbWriteTable}()} +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} + +Other data retrieval generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbFetch}()}, +\code{\link[DBI]{dbFetchArrow}()}, +\code{\link[DBI]{dbFetchArrowChunk}()}, +\code{\link[DBI]{dbGetQuery}()}, +\code{\link[DBI]{dbGetQueryArrow}()}, +\code{\link[DBI]{dbHasCompleted}()}, +\code{\link[DBI]{dbSendQueryArrow}()} } diff --git a/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd b/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd index 6f1b9e61..e0b6a9b9 100644 --- a/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd +++ b/man/dbSendStatement-DatabaseConnectorConnection-character-method.Rd @@ -46,7 +46,9 @@ For queries: \code{\link[DBI:dbSendQuery]{dbSendQuery()}} and \code{\link[DBI:db 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}()}, @@ -54,14 +56,26 @@ Other DBIConnection generics: \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]{dbWriteTable}()} +\code{\link[DBI]{dbSendQueryArrow}()}, +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTable}()}, +\code{\link[DBI]{dbWriteTableArrow}()} + +Other command execution generics: +\code{\link[DBI]{dbBind}()}, +\code{\link[DBI]{dbClearResult}()}, +\code{\link[DBI]{dbExecute}()}, +\code{\link[DBI]{dbGetRowsAffected}()} } diff --git a/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd b/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd index a5874645..04d6d5be 100644 --- a/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd +++ b/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd @@ -31,7 +31,7 @@ e.g. \code{Id(schema = "my_schema", table = "table_name")} given verbatim, e.g. \code{SQL('"my_schema"."table_name"')} }} -\item{value}{a \link{data.frame} (or coercible to data.frame).} +\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.} @@ -69,7 +69,9 @@ specify the schema. 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}()}, @@ -77,14 +79,20 @@ Other DBIConnection generics: \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]{dbSendStatement}()} +\code{\link[DBI]{dbSendQueryArrow}()}, +\code{\link[DBI]{dbSendStatement}()}, +\code{\link[DBI]{dbUnquoteIdentifier}()}, +\code{\link[DBI]{dbWriteTableArrow}()} } diff --git a/man/jdbcDrivers.Rd b/man/jdbcDrivers.Rd index 22b80d0e..f6c0b0a3 100644 --- a/man/jdbcDrivers.Rd +++ b/man/jdbcDrivers.Rd @@ -27,5 +27,10 @@ your OS version, and click "GET IT NOW!'. Register, and you should be able to do \section{SQLite}{ For SQLite we actually don't use a JDBC driver. Instead, we use the RSQLite package, which can be installed using \code{install.packages("RSQLite")}. + +InterSystems IRIS + +For InterSystems IRIS, download the driver \href{https://intersystems-community.github.io/iris-driver-distribution/}{here}, +or locate the intersystems-jdbc-\if{html}{\out{}}.jar in the ./dev/java/lib/1.8/ folder of your IRIS installation. } From 05cc5dbe2ddd993f138b4674dc396c36c730936b Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Mon, 24 Jun 2024 13:20:42 +0200 Subject: [PATCH 06/20] use uppercase IRIS in JDBC URL --- man-roxygen/DefaultConnectionDetails.R | 2 +- man/connect.Rd | 2 +- man/createConnectionDetails.Rd | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/man-roxygen/DefaultConnectionDetails.R b/man-roxygen/DefaultConnectionDetails.R index 60d04ec1..9e7d4552 100644 --- a/man-roxygen/DefaultConnectionDetails.R +++ b/man-roxygen/DefaultConnectionDetails.R @@ -133,7 +133,7 @@ #' #' InterSystems IRIS: #' - `connectionString`. The connection string (e.g. starting with -#' 'jdbc:iris://host:port/namespace'). Alternatively, you can provide +#' 'jdbc:IRIS://host:port/namespace'). Alternatively, you can provide #' values for `server` and `port`, in which case the default `USER` namespace #' is used to connect. #' - `user`. The user name used to access the server. diff --git a/man/connect.Rd b/man/connect.Rd index 531a331e..fb14da39 100644 --- a/man/connect.Rd +++ b/man/connect.Rd @@ -186,7 +186,7 @@ Snowflake: InterSystems IRIS: \itemize{ \item \code{connectionString}. The connection string (e.g. starting with -'jdbc:iris://host:port/namespace'). Alternatively, you can provide +'jdbc:IRIS://host:port/namespace'). Alternatively, you can provide values for \code{server} and \code{port}, in which case the default \code{USER} namespace is used to connect. \item \code{user}. The user name used to access the server. diff --git a/man/createConnectionDetails.Rd b/man/createConnectionDetails.Rd index 40c7fd51..b3840a7e 100644 --- a/man/createConnectionDetails.Rd +++ b/man/createConnectionDetails.Rd @@ -181,7 +181,7 @@ Snowflake: InterSystems IRIS: \itemize{ \item \code{connectionString}. The connection string (e.g. starting with -'jdbc:iris://host:port/namespace'). Alternatively, you can provide +'jdbc:IRIS://host:port/namespace'). Alternatively, you can provide values for \code{server} and \code{port}, in which case the default \code{USER} namespace is used to connect. \item \code{user}. The user name used to access the server. From 6f307d975c87c9beeef641a135ea753bb2a9eaaa Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Mon, 16 Sep 2024 13:24:20 +0200 Subject: [PATCH 07/20] Note InterSystems IRIS in reference --- DESCRIPTION | 5 +++-- vignettes/Connecting.Rmd | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8c6076bd..47e28870 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -13,8 +13,9 @@ Authors@R: c( person("Amazon Inc.", role = c("cph"), comment = "RedShift JDBC driver") ) Description: An R 'DataBase Interface' ('DBI') compatible interface to various database platforms ('PostgreSQL', 'Oracle', 'Microsoft SQL Server', - 'Amazon Redshift', 'Microsoft Parallel Database Warehouse', 'IBM Netezza', 'Apache Impala', 'Google BigQuery', 'Snowflake', 'Spark', and 'SQLite'). Also includes support for - fetching data as 'Andromeda' objects. Uses either 'Java Database Connectivity' ('JDBC') or other 'DBI' drivers to connect to databases. + 'Amazon Redshift', 'Microsoft Parallel Database Warehouse', 'IBM Netezza', 'Apache Impala', 'Google BigQuery', 'Snowflake', 'Spark', 'SQLite', + and 'InterSystems IRIS'). Also includes support for fetching data as 'Andromeda' objects. Uses either 'Java Database Connectivity' ('JDBC') or + other 'DBI' drivers to connect to databases. SystemRequirements: Java (>= 8) Depends: R (>= 4.0.0) diff --git a/vignettes/Connecting.Rmd b/vignettes/Connecting.Rmd index 9c9c820d..93dfa0be 100644 --- a/vignettes/Connecting.Rmd +++ b/vignettes/Connecting.Rmd @@ -37,6 +37,7 @@ This vignette describes how you can use the `DatabaseConnector` package to conne * (DataBricks)Spark * Snowflake * Synapse +* InterSystems IRIS # Obtaining drivers @@ -87,9 +88,9 @@ writeLines("DatabaseConnector JDBC drivers downloaded to 'c:/temp/jdbcDrivers'." Note that if we hadn't specified the `DATABASECONNECTOR_JAR_FOLDER` environmental variable, we would have to specify the `pathToDriver` argument when calling `downloadJdbcDrivers`. -## Obtaining drivers for Netezza and Impala +## Obtaining drivers for Netezza, Impala and InterSystems IRIS -Because of licensing reasons the drivers for BigQuery, Netezza and Impala are not included but must be obtained by the user. see [these instructions on how to download these drivers](http://ohdsi.github.io/DatabaseConnector/reference/jdbcDrivers.html), which you can also see by typing `?jdbcDrivers`. +Because of licensing reasons the drivers for BigQuery, Netezza, Impala and InterSystems IRIS are not included but must be obtained by the user. see [these instructions on how to download these drivers](http://ohdsi.github.io/DatabaseConnector/reference/jdbcDrivers.html), which you can also see by typing `?jdbcDrivers`. ## Obtaining drivers for SQLite or DuckDb From 428340695513fcc442a7b3467071150c4842137a Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Mon, 16 Sep 2024 13:25:10 +0200 Subject: [PATCH 08/20] Fix section formatting & rerun roxygen --- R/DatabaseConnector.R | 2 +- man/DatabaseConnector-package.Rd | 2 +- ...riteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd} | 6 +++--- man/jdbcDrivers.Rd | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) rename man/{dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd => dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd} (94%) diff --git a/R/DatabaseConnector.R b/R/DatabaseConnector.R index b37381dc..2ac6b780 100644 --- a/R/DatabaseConnector.R +++ b/R/DatabaseConnector.R @@ -76,7 +76,7 @@ NULL #' For SQLite we actually don't use a JDBC driver. Instead, we use the RSQLite package, which can be installed #' using `install.packages("RSQLite")`. #' -#' InterSystems IRIS +#' # InterSystems IRIS #' #' For InterSystems IRIS, download the driver [here](https://intersystems-community.github.io/iris-driver-distribution/), #' or locate the intersystems-jdbc-.jar in the ./dev/java/lib/1.8/ folder of your IRIS installation. diff --git a/man/DatabaseConnector-package.Rd b/man/DatabaseConnector-package.Rd index 31c7e7e4..20fbc772 100644 --- a/man/DatabaseConnector-package.Rd +++ b/man/DatabaseConnector-package.Rd @@ -6,7 +6,7 @@ \alias{DatabaseConnector-package} \title{DatabaseConnector: Connecting to Various Database Platforms} \description{ -An R 'DataBase Interface' ('DBI') compatible interface to various database platforms ('PostgreSQL', 'Oracle', 'Microsoft SQL Server', 'Amazon Redshift', 'Microsoft Parallel Database Warehouse', 'IBM Netezza', 'Apache Impala', 'Google BigQuery', 'Snowflake', 'Spark', and 'SQLite'). Also includes support for fetching data as 'Andromeda' objects. Uses either 'Java Database Connectivity' ('JDBC') or other 'DBI' drivers to connect to databases. +An R 'DataBase Interface' ('DBI') compatible interface to various database platforms ('PostgreSQL', 'Oracle', 'Microsoft SQL Server', 'Amazon Redshift', 'Microsoft Parallel Database Warehouse', 'IBM Netezza', 'Apache Impala', 'Google BigQuery', 'Snowflake', 'Spark', 'SQLite', and 'InterSystems IRIS'). Also includes support for fetching data as 'Andromeda' objects. Uses either 'Java Database Connectivity' ('JDBC') or other 'DBI' drivers to connect to databases. } \seealso{ Useful links: diff --git a/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd b/man/dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd similarity index 94% rename from man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd rename to man/dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd index 04d6d5be..b983e42e 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, diff --git a/man/jdbcDrivers.Rd b/man/jdbcDrivers.Rd index f6c0b0a3..ae0570af 100644 --- a/man/jdbcDrivers.Rd +++ b/man/jdbcDrivers.Rd @@ -27,9 +27,9 @@ your OS version, and click "GET IT NOW!'. Register, and you should be able to do \section{SQLite}{ For SQLite we actually don't use a JDBC driver. Instead, we use the RSQLite package, which can be installed using \code{install.packages("RSQLite")}. +} -InterSystems IRIS - +\section{InterSystems IRIS}{ For InterSystems IRIS, download the driver \href{https://intersystems-community.github.io/iris-driver-distribution/}{here}, or locate the intersystems-jdbc-\if{html}{\out{}}.jar in the ./dev/java/lib/1.8/ folder of your IRIS installation. } From 69f8dbbf6b45a6b609451f09ccbcbd348a1e119e Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Wed, 9 Oct 2024 13:42:06 +0200 Subject: [PATCH 09/20] require SqlRender 1.19.0 for new IRIS dialect support --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 47e28870..8a9bd8af 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -21,7 +21,7 @@ Depends: R (>= 4.0.0) Imports: rJava, - SqlRender (>= 1.16.0), + SqlRender (>= 1.19.0), methods, stringr, readr, From 46c896b67a0888d1024c8685aa28aae847563bed Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Wed, 9 Oct 2024 16:55:28 +0200 Subject: [PATCH 10/20] simplify testing when test servers are undefined --- tests/testthat/setup.R | 254 ++++++++++++++++++++++------------------- 1 file changed, 134 insertions(+), 120 deletions(-) diff --git a/tests/testthat/setup.R b/tests/testthat/setup.R index 63c5be46..3885527b 100644 --- a/tests/testthat/setup.R +++ b/tests/testthat/setup.R @@ -34,143 +34,157 @@ addDbmsToLabel <- function(label, testServer) { testServers <- list() # Postgres -parts <- unlist(strsplit(Sys.getenv("CDM5_POSTGRESQL_SERVER"), "/")) -host <- parts[1] -database <- parts[2] -port <- "5432" -connectionString <- paste0("jdbc:postgresql://", host, ":", port, "/", database) -testServers[[length(testServers) + 1]] <- list( - connectionDetails = createConnectionDetails( - dbms = "postgresql", - user = Sys.getenv("CDM5_POSTGRESQL_USER"), - password = URLdecode(Sys.getenv("CDM5_POSTGRESQL_PASSWORD")), - server = Sys.getenv("CDM5_POSTGRESQL_SERVER") - ), - connectionDetails2 = details <- createConnectionDetails( - dbms = "postgresql", - connectionString = !!connectionString, - user = Sys.getenv("CDM5_POSTGRESQL_USER"), - password = URLdecode(Sys.getenv("CDM5_POSTGRESQL_PASSWORD")) - ), - cdmDatabaseSchema = Sys.getenv("CDM5_POSTGRESQL_CDM54_SCHEMA"), - tempEmulationSchema = NULL -) +if (Sys.getenv("CDM5_POSTGRESQL_SERVER") != "") { + parts <- unlist(strsplit(Sys.getenv("CDM5_POSTGRESQL_SERVER"), "/")) + host <- parts[1] + database <- parts[2] + port <- "5432" + connectionString <- paste0("jdbc:postgresql://", host, ":", port, "/", database) + testServers[[length(testServers) + 1]] <- list( + connectionDetails = createConnectionDetails( + dbms = "postgresql", + user = Sys.getenv("CDM5_POSTGRESQL_USER"), + password = URLdecode(Sys.getenv("CDM5_POSTGRESQL_PASSWORD")), + server = Sys.getenv("CDM5_POSTGRESQL_SERVER") + ), + connectionDetails2 = details <- createConnectionDetails( + dbms = "postgresql", + connectionString = !!connectionString, + user = Sys.getenv("CDM5_POSTGRESQL_USER"), + password = URLdecode(Sys.getenv("CDM5_POSTGRESQL_PASSWORD")) + ), + cdmDatabaseSchema = Sys.getenv("CDM5_POSTGRESQL_CDM54_SCHEMA"), + tempEmulationSchema = NULL + ) +} # SQL Server -connectionString <- paste0("jdbc:sqlserver://", Sys.getenv("CDM5_SQL_SERVER_SERVER")) -testServers[[length(testServers) + 1]] <- list( - connectionDetails = details <- createConnectionDetails( - dbms = "sql server", - user = Sys.getenv("CDM5_SQL_SERVER_USER"), - password = URLdecode(Sys.getenv("CDM5_SQL_SERVER_PASSWORD")), - server = Sys.getenv("CDM5_SQL_SERVER_SERVER") - ), - connectionDetails2 = details <- createConnectionDetails( - dbms = "sql server", - connectionString = !!connectionString, - user = Sys.getenv("CDM5_SQL_SERVER_USER"), - password = URLdecode(Sys.getenv("CDM5_SQL_SERVER_PASSWORD")) - ), - cdmDatabaseSchema = Sys.getenv("CDM5_SQL_SERVER_CDM54_SCHEMA"), - tempEmulationSchema = NULL -) +if (Sys.getenv("CDM5_SQL_SERVER_SERVER") != "") { + connectionString <- paste0("jdbc:sqlserver://", Sys.getenv("CDM5_SQL_SERVER_SERVER")) + testServers[[length(testServers) + 1]] <- list( + connectionDetails = details <- createConnectionDetails( + dbms = "sql server", + user = Sys.getenv("CDM5_SQL_SERVER_USER"), + password = URLdecode(Sys.getenv("CDM5_SQL_SERVER_PASSWORD")), + server = Sys.getenv("CDM5_SQL_SERVER_SERVER") + ), + connectionDetails2 = details <- createConnectionDetails( + dbms = "sql server", + connectionString = !!connectionString, + user = Sys.getenv("CDM5_SQL_SERVER_USER"), + password = URLdecode(Sys.getenv("CDM5_SQL_SERVER_PASSWORD")) + ), + cdmDatabaseSchema = Sys.getenv("CDM5_SQL_SERVER_CDM54_SCHEMA"), + tempEmulationSchema = NULL + ) +} # Oracle -port <- "1521" -parts <- unlist(strsplit(Sys.getenv("CDM5_ORACLE_SERVER"), "/")) -host <- parts[1] -sid <- parts[2] -connectionString <- paste0("jdbc:oracle:thin:@", host, ":", port, ":", sid) -testServers[[length(testServers) + 1]] <- list( - connectionDetails = details <- createConnectionDetails( - dbms = "oracle", - user = Sys.getenv("CDM5_ORACLE_USER"), - password = URLdecode(Sys.getenv("CDM5_ORACLE_PASSWORD")), - server = Sys.getenv("CDM5_ORACLE_SERVER") - ), - connectionDetails2 = details <- createConnectionDetails( - dbms = "oracle", - connectionString = !!connectionString, - user = Sys.getenv("CDM5_ORACLE_USER"), - password = URLdecode(Sys.getenv("CDM5_ORACLE_PASSWORD")) - ), - cdmDatabaseSchema = Sys.getenv("CDM5_ORACLE_CDM54_SCHEMA"), - tempEmulationSchema = Sys.getenv("CDM5_ORACLE_OHDSI_SCHEMA") -) +if (Sys.getenv("CDM5_ORACLE_SERVER") != "") { + port <- "1521" + parts <- unlist(strsplit(Sys.getenv("CDM5_ORACLE_SERVER"), "/")) + host <- parts[1] + sid <- parts[2] + connectionString <- paste0("jdbc:oracle:thin:@", host, ":", port, ":", sid) + testServers[[length(testServers) + 1]] <- list( + connectionDetails = details <- createConnectionDetails( + dbms = "oracle", + user = Sys.getenv("CDM5_ORACLE_USER"), + password = URLdecode(Sys.getenv("CDM5_ORACLE_PASSWORD")), + server = Sys.getenv("CDM5_ORACLE_SERVER") + ), + connectionDetails2 = details <- createConnectionDetails( + dbms = "oracle", + connectionString = !!connectionString, + user = Sys.getenv("CDM5_ORACLE_USER"), + password = URLdecode(Sys.getenv("CDM5_ORACLE_PASSWORD")) + ), + cdmDatabaseSchema = Sys.getenv("CDM5_ORACLE_CDM54_SCHEMA"), + tempEmulationSchema = Sys.getenv("CDM5_ORACLE_OHDSI_SCHEMA") + ) +} # RedShift -parts <- unlist(strsplit(Sys.getenv("CDM5_REDSHIFT_SERVER"), "/")) -host <- parts[1] -database <- parts[2] -port <- "5439" -connectionString <- paste0("jdbc:redshift://", host, ":", port, "/", database) -testServers[[length(testServers) + 1]] <- list( - connectionDetails = details <- createConnectionDetails( - dbms = "redshift", - user = Sys.getenv("CDM5_REDSHIFT_USER"), - password = URLdecode(Sys.getenv("CDM5_REDSHIFT_PASSWORD")), - server = Sys.getenv("CDM5_REDSHIFT_SERVER") - ), - connectionDetails2 = details <- createConnectionDetails( - dbms = "redshift", - connectionString = connectionString, - user = Sys.getenv("CDM5_REDSHIFT_USER"), - password = URLdecode(Sys.getenv("CDM5_REDSHIFT_PASSWORD")) - ), - cdmDatabaseSchema = Sys.getenv("CDM5_REDSHIFT_CDM54_SCHEMA"), - tempEmulationSchema = NULL -) +if (Sys.getenv("CDM5_REDSHIFT_SERVER") != "") { + parts <- unlist(strsplit(Sys.getenv("CDM5_REDSHIFT_SERVER"), "/")) + host <- parts[1] + database <- parts[2] + port <- "5439" + connectionString <- paste0("jdbc:redshift://", host, ":", port, "/", database) + testServers[[length(testServers) + 1]] <- list( + connectionDetails = details <- createConnectionDetails( + dbms = "redshift", + user = Sys.getenv("CDM5_REDSHIFT_USER"), + password = URLdecode(Sys.getenv("CDM5_REDSHIFT_PASSWORD")), + server = Sys.getenv("CDM5_REDSHIFT_SERVER") + ), + connectionDetails2 = details <- createConnectionDetails( + dbms = "redshift", + connectionString = connectionString, + user = Sys.getenv("CDM5_REDSHIFT_USER"), + password = URLdecode(Sys.getenv("CDM5_REDSHIFT_PASSWORD")) + ), + cdmDatabaseSchema = Sys.getenv("CDM5_REDSHIFT_CDM54_SCHEMA"), + tempEmulationSchema = NULL + ) +} # Snowflake -testServers[[length(testServers) + 1]] <- list( - connectionDetails = details <- createConnectionDetails( - dbms = "snowflake", - user = Sys.getenv("CDM_SNOWFLAKE_USER"), - password = URLdecode(Sys.getenv("CDM_SNOWFLAKE_PASSWORD")), - connectionString = Sys.getenv("CDM_SNOWFLAKE_CONNECTION_STRING") - ), - NULL, - cdmDatabaseSchema = Sys.getenv("CDM_SNOWFLAKE_CDM53_SCHEMA"), - tempEmulationSchema = Sys.getenv("CDM_SNOWFLAKE_OHDSI_SCHEMA") -) +if (Sys.getenv("CDM_SNOWFLAKE_CONNECTION_STRING") != "") { + testServers[[length(testServers) + 1]] <- list( + connectionDetails = details <- createConnectionDetails( + dbms = "snowflake", + user = Sys.getenv("CDM_SNOWFLAKE_USER"), + password = URLdecode(Sys.getenv("CDM_SNOWFLAKE_PASSWORD")), + connectionString = Sys.getenv("CDM_SNOWFLAKE_CONNECTION_STRING") + ), + NULL, + cdmDatabaseSchema = Sys.getenv("CDM_SNOWFLAKE_CDM53_SCHEMA"), + tempEmulationSchema = Sys.getenv("CDM_SNOWFLAKE_OHDSI_SCHEMA") + ) +} # Databricks (Spark) -testServers[[length(testServers) + 1]] <- list( - connectionDetails = details <- createConnectionDetails( - dbms = "spark", - user = Sys.getenv("CDM5_SPARK_USER"), - password = URLdecode(Sys.getenv("CDM5_SPARK_PASSWORD")), - connectionString = Sys.getenv("CDM5_SPARK_CONNECTION_STRING") - ), - NULL, - cdmDatabaseSchema = Sys.getenv("CDM5_SPARK_CDM_SCHEMA"), - tempEmulationSchema = Sys.getenv("CDM5_SPARK_OHDSI_SCHEMA") -) - -# BigQuery -# To avoid rate limit on BigQuery, only test on 1 OS: -if (.Platform$OS.type == "windows") { - bqKeyFile <- tempfile(fileext = ".json") - writeLines(Sys.getenv("CDM_BIG_QUERY_KEY_FILE"), bqKeyFile) - if (testthat::is_testing()) { - withr::defer(unlink(bqKeyFile, force = TRUE), testthat::teardown_env()) - } - bqConnectionString <- gsub("", - normalizePath(bqKeyFile, winslash = "/"), - Sys.getenv("CDM_BIG_QUERY_CONNECTION_STRING")) +if (Sys.getenv("CDM5_SPARK_CONNECTION_STRING") != "") { testServers[[length(testServers) + 1]] <- list( connectionDetails = details <- createConnectionDetails( - dbms = "bigquery", - user = "", - password = "", - connectionString = !!bqConnectionString + dbms = "spark", + user = Sys.getenv("CDM5_SPARK_USER"), + password = URLdecode(Sys.getenv("CDM5_SPARK_PASSWORD")), + connectionString = Sys.getenv("CDM5_SPARK_CONNECTION_STRING") ), NULL, - cdmDatabaseSchema = Sys.getenv("CDM_BIG_QUERY_CDM_SCHEMA"), - tempEmulationSchema = Sys.getenv("CDM_BIG_QUERY_OHDSI_SCHEMA") + cdmDatabaseSchema = Sys.getenv("CDM5_SPARK_CDM_SCHEMA"), + tempEmulationSchema = Sys.getenv("CDM5_SPARK_OHDSI_SCHEMA") ) } +# BigQuery +if (Sys.getenv("CDM_BIG_QUERY_CONNECTION_STRING") != "") { + # To avoid rate limit on BigQuery, only test on 1 OS: + if (.Platform$OS.type == "windows") { + bqKeyFile <- tempfile(fileext = ".json") + writeLines(Sys.getenv("CDM_BIG_QUERY_KEY_FILE"), bqKeyFile) + if (testthat::is_testing()) { + withr::defer(unlink(bqKeyFile, force = TRUE), testthat::teardown_env()) + } + bqConnectionString <- gsub("", + normalizePath(bqKeyFile, winslash = "/"), + Sys.getenv("CDM_BIG_QUERY_CONNECTION_STRING")) + testServers[[length(testServers) + 1]] <- list( + connectionDetails = details <- createConnectionDetails( + dbms = "bigquery", + user = "", + password = "", + connectionString = !!bqConnectionString + ), + NULL, + cdmDatabaseSchema = Sys.getenv("CDM_BIG_QUERY_CDM_SCHEMA"), + tempEmulationSchema = Sys.getenv("CDM_BIG_QUERY_OHDSI_SCHEMA") + ) + } +} + # SQLite sqliteFile <- tempfile(fileext = ".sqlite") if (testthat::is_testing()) { From cc2f38d408fe3e3b6262249a52168f42b37b7d8f Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Wed, 9 Oct 2024 17:04:29 +0200 Subject: [PATCH 11/20] simplify retrieving JDBC driver for InterSystems IRIS --- R/DatabaseConnector.R | 7 +------ R/Drivers.R | 30 +++++++++++++++++++----------- man/downloadJdbcDrivers.Rd | 2 ++ man/jdbcDrivers.Rd | 7 +------ 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/R/DatabaseConnector.R b/R/DatabaseConnector.R index 2ac6b780..726ed2cf 100644 --- a/R/DatabaseConnector.R +++ b/R/DatabaseConnector.R @@ -56,7 +56,7 @@ NULL #' functions to point to the driver. Alternatively, you can set the 'DATABASECONNECTOR_JAR_FOLDER' environmental #' variable, for example in your .Renviron file (recommended). #' -#' # SQL Server, Oracle, PostgreSQL, PDW, Snowflake, Spark, RedShift, Azure Synapse, BigQuery +#' # SQL Server, Oracle, PostgreSQL, PDW, Snowflake, Spark, RedShift, Azure Synapse, BigQuery, InterSystems IRIS #' #' Use the [downloadJdbcDrivers()] function to download these drivers from the OHDSI GitHub pages. #' @@ -75,11 +75,6 @@ NULL #' #' For SQLite we actually don't use a JDBC driver. Instead, we use the RSQLite package, which can be installed #' using `install.packages("RSQLite")`. -#' -#' # InterSystems IRIS -#' -#' For InterSystems IRIS, download the driver [here](https://intersystems-community.github.io/iris-driver-distribution/), -#' or locate the intersystems-jdbc-.jar in the ./dev/java/lib/1.8/ folder of your IRIS installation. #' NULL diff --git a/R/Drivers.R b/R/Drivers.R index 74d5aa36..ba0f82aa 100644 --- a/R/Drivers.R +++ b/R/Drivers.R @@ -33,6 +33,7 @@ jdbcDrivers <- new.env() #' - "spark" for Spark #' - "snowflake" for Snowflake #' - "bigquery" for Google BigQuery +#' - "iris" for InterSystems IRIS #' - "all" for all aforementioned platforms #' #' @param method The method used for downloading files. See `?download.file` for details and options. @@ -48,6 +49,7 @@ jdbcDrivers <- new.env() #' - Spark: V2.6.21 #' - Snowflake: V3.13.22 #' - BigQuery: v1.3.2.1003 +#' - InterSystems IRIS: v3.9.0 #' #' @return Invisibly returns the destination if the download was successful. #' @export @@ -82,7 +84,7 @@ downloadJdbcDrivers <- function(dbms, pathToDriver = Sys.getenv("DATABASECONNECT dir.create(pathToDriver, recursive = TRUE) } - stopifnot(is.character(dbms), length(dbms) == 1, dbms %in% c("all", "postgresql", "redshift", "sql server", "oracle", "pdw", "snowflake", "spark", "bigquery")) + stopifnot(is.character(dbms), length(dbms) == 1, dbms %in% c("all", "postgresql", "redshift", "sql server", "oracle", "pdw", "snowflake", "spark", "bigquery", "iris")) if (dbms == "pdw" || dbms == "synapse") { dbms <- "sql server" @@ -96,7 +98,8 @@ downloadJdbcDrivers <- function(dbms, pathToDriver = Sys.getenv("DATABASECONNECT 4,oracle,oracleV19.8.zip,https://ohdsi.github.io/DatabaseConnectorJars/ 5,spark,DatabricksJDBC42-2.6.32.1054.zip,https://databricks-bi-artifacts.s3.us-east-2.amazonaws.com/simbaspark-drivers/jdbc/2.6.32/ 6,snowflake,SnowflakeV3.13.22.zip,https://ohdsi.github.io/DatabaseConnectorJars/ - 7,bigquery,SimbaBigQueryJDBC42-1.3.2.1003.zip,https://storage.googleapis.com/simba-bq-release/jdbc/" + 7,bigquery,SimbaBigQueryJDBC42-1.3.2.1003.zip,https://storage.googleapis.com/simba-bq-release/jdbc/ + 8,iris,intersystems-jdbc-3.9.0.jar,https://github.com/intersystems-community/iris-driver-distribution/raw/refs/heads/main/JDBC/JDK18/" ) if (dbms == "all") { dbms <- jdbcDriverSources$dbms @@ -119,16 +122,21 @@ downloadJdbcDrivers <- function(dbms, pathToDriver = Sys.getenv("DATABASECONNECT method = method ) - extractedFilename <- unzip(file.path(pathToDriver, driverSource$fileName), exdir = pathToDriver) - unzipSuccess <- is.character(extractedFilename) - - if (unzipSuccess) { - file.remove(file.path(pathToDriver, driverSource$fileName)) - } - if (unzipSuccess && result == 0) { - inform(paste0("DatabaseConnector ", db, " JDBC driver downloaded to '", pathToDriver, "'.")) + extension <- tail(strsplit(file.path(pathToDriver, driverSource$fileName), split=".", fixed = TRUE)[[1]],1) + if (extension == "zip") { + extractedFilename <- unzip(file.path(pathToDriver, driverSource$fileName), exdir = pathToDriver) + unzipSuccess <- is.character(extractedFilename) + + if (unzipSuccess) { + file.remove(file.path(pathToDriver, driverSource$fileName)) + } + if (unzipSuccess && result == 0) { + inform(paste0("DatabaseConnector ", db, " JDBC driver downloaded to '", pathToDriver, "'.")) + } else { + abort(paste0("Downloading and unzipping of ", db, " JDBC driver to '", pathToDriver, "' has failed.")) + } } else { - abort(paste0("Downloading and unzipping of ", db, " JDBC driver to '", pathToDriver, "' has failed.")) + inform(paste0("DatabaseConnector ", db, " JDBC driver downloaded to '", pathToDriver, "'.")) } } diff --git a/man/downloadJdbcDrivers.Rd b/man/downloadJdbcDrivers.Rd index 412b2c0c..35443979 100644 --- a/man/downloadJdbcDrivers.Rd +++ b/man/downloadJdbcDrivers.Rd @@ -21,6 +21,7 @@ downloadJdbcDrivers( \item "spark" for Spark \item "snowflake" for Snowflake \item "bigquery" for Google BigQuery +\item "iris" for InterSystems IRIS \item "all" for all aforementioned platforms }} @@ -47,6 +48,7 @@ The following versions of the JDBC drivers are currently used: \item Spark: V2.6.21 \item Snowflake: V3.13.22 \item BigQuery: v1.3.2.1003 +\item InterSystems IRIS: v3.9.0 } } \examples{ diff --git a/man/jdbcDrivers.Rd b/man/jdbcDrivers.Rd index ae0570af..fdb0e202 100644 --- a/man/jdbcDrivers.Rd +++ b/man/jdbcDrivers.Rd @@ -9,7 +9,7 @@ use the \code{pathToDriver} argument in the \code{\link[=connect]{connect()}} or functions to point to the driver. Alternatively, you can set the 'DATABASECONNECTOR_JAR_FOLDER' environmental variable, for example in your .Renviron file (recommended). } -\section{SQL Server, Oracle, PostgreSQL, PDW, Snowflake, Spark, RedShift, Azure Synapse, BigQuery}{ +\section{SQL Server, Oracle, PostgreSQL, PDW, Snowflake, Spark, RedShift, Azure Synapse, BigQuery, InterSystems IRIS}{ Use the \code{\link[=downloadJdbcDrivers]{downloadJdbcDrivers()}} function to download these drivers from the OHDSI GitHub pages. } @@ -29,8 +29,3 @@ For SQLite we actually don't use a JDBC driver. Instead, we use the RSQLite pack using \code{install.packages("RSQLite")}. } -\section{InterSystems IRIS}{ -For InterSystems IRIS, download the driver \href{https://intersystems-community.github.io/iris-driver-distribution/}{here}, -or locate the intersystems-jdbc-\if{html}{\out{}}.jar in the ./dev/java/lib/1.8/ folder of your IRIS installation. -} - From 600926314f6bb8d3382053bfd3bcfa70b7d30efb Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 10 Oct 2024 09:45:29 +0200 Subject: [PATCH 12/20] initial IRIS setup --- tests/testthat/setup.R | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/testthat/setup.R b/tests/testthat/setup.R index 3885527b..d96fd305 100644 --- a/tests/testthat/setup.R +++ b/tests/testthat/setup.R @@ -12,6 +12,7 @@ if (Sys.getenv("DONT_DOWNLOAD_JDBC_DRIVERS", "") != "TRUE") { downloadJdbcDrivers("spark") downloadJdbcDrivers("snowflake") downloadJdbcDrivers("bigquery") + downloadJdbcDrivers("iris") if (testthat::is_testing()) { withr::defer({ @@ -185,6 +186,23 @@ if (Sys.getenv("CDM_BIG_QUERY_CONNECTION_STRING") != "") { } } + + +# InterSystems IRIS +if (Sys.getenv("CDM_IRIS_CONNECTION_STRING") != "") { + testServers[[length(testServers) + 1]] <- list( + connectionDetails = details <- createConnectionDetails( + dbms = "iris", + user = Sys.getenv("CDM_IRIS_USER"), + password = URLdecode(Sys.getenv("CDM_IRIS_PASSWORD")), + connectionString = Sys.getenv("CDM_IRIS_CONNECTION_STRING") + ), + NULL, + cdmDatabaseSchema = Sys.getenv("CDM_IRIS_CDM53_SCHEMA"), + tempEmulationSchema = Sys.getenv("CDM_IRIS_OHDSI_SCHEMA") + ) +} + # SQLite sqliteFile <- tempfile(fileext = ".sqlite") if (testthat::is_testing()) { From 8a6cdbd56040bec960f561ad1e6713437d38411d Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 10 Oct 2024 12:57:24 +0200 Subject: [PATCH 13/20] use executeBatch() rather than executeLargeBatch() on InterSystems IRIS --- R/Sql.R | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/R/Sql.R b/R/Sql.R index 5928c72a..c5687a2a 100644 --- a/R/Sql.R +++ b/R/Sql.R @@ -436,7 +436,13 @@ executeSql <- function(connection, tryCatch( { startQuery <- Sys.time() - rowsAffected <- c(rowsAffected, rJava::.jcall(statement, "[J", "executeLargeBatch")) + # InterSystems IRIS JDBC supports batch updates but does not have a separate + # executeLargeBatch() method + if (con@dbms == "iris") { + rowsAffected <- c(rowsAffected, rJava::.jcall(statement, "[I", "executeBatch")) + } else { + rowsAffected <- c(rowsAffected, rJava::.jcall(statement, "[J", "executeLargeBatch")) + } delta <- Sys.time() - startQuery if (profile) { inform(paste("Statements", start, "through", end, "took", delta, attr(delta, "units"))) From 026d0b393f9a646ed3087ccad84c2b148c4b8400 Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 10 Oct 2024 13:03:20 +0200 Subject: [PATCH 14/20] add InterSystems IRIS datatypes to insertTable unit test --- tests/testthat/test-insertTable.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/testthat/test-insertTable.R b/tests/testthat/test-insertTable.R index 2d34ea73..edacd293 100644 --- a/tests/testthat/test-insertTable.R +++ b/tests/testthat/test-insertTable.R @@ -96,6 +96,8 @@ for (testServer in testServers) { expect_equal(as.character(columnInfo$field.type), c("DATE", "TIMESTAMP", "INT", "FLOAT", "STRING", "BIGINT")) } else if (dbms == "bigquery") { expect_equal(as.character(columnInfo$field.type), c("DATE", "DATETIME", "INT64", "FLOAT64", "STRING", "INT64")) + } else if (dbms == "iris") { + expect_equal(as.character(columnInfo$field.type), c("DATE", "TIMESTAMP", "INTEGER", "DOUBLE", "VARCHAR", "BIGINT")) } else { warning("Unable to check column types for ", dbms) } From e2b598689e43f7d4c9b3c2fa89b664e7204f13a3 Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 10 Oct 2024 13:03:45 +0200 Subject: [PATCH 15/20] drop temp table if exists at start of test --- tests/testthat/test-bdb.R | 50 +++++++++++++++++++++++++++++++ tests/testthat/test-sendUpdates.R | 7 +++-- 2 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 tests/testthat/test-bdb.R diff --git a/tests/testthat/test-bdb.R b/tests/testthat/test-bdb.R new file mode 100644 index 00000000..3d4f4f05 --- /dev/null +++ b/tests/testthat/test-bdb.R @@ -0,0 +1,50 @@ +library(usethis) +library(devtools) +#library(ParallelLogger) +#load_all("C:/Users/bdeboe/Github/intersystems-community/OHDSI-SqlRender", TRUE, TRUE, TRUE, TRUE, TRUE) +#.jaddClassPath("C:/Users/bdeboe/Github/intersystems-community/OHDSI-SqlRender/target/SqlRender-1.19.0-SNAPSHOT.jar") +load_all("C:/Users/bdeboe/Github/intersystems-community/OHDSI-DatabaseConnector", TRUE, TRUE, TRUE, TRUE, TRUE) + +#Sys.setenv(DATABASECONNECTOR_JAR = "C:\\InterSystems\\SQLML\\dev\\java\\lib\\1.8") +#options(LOG_DATABASECONNECTOR_SQL = TRUE) +# assign("noLogging", FALSE, envir = globalVars) +# logger<-createLogger(name="SIMPLE", threshold="TRACE", appenders=list(createConsoleAppender(layout=layoutTimestamp))) + +# ParallelLogger::logTrace("Trace this!") + +Sys.setenv("DATABASECONNECTOR_JAR_FOLDER" = "C:\\tmp\\ohdsi") +downloadJdbcDrivers("iris") + +connectionDetails <- createConnectionDetails( + dbms = "iris", + server = "localhost", + port = 51774, + database = "OMOP2", + user = "_SYSTEM", + password = "SYS" +) + +connection <- DatabaseConnector::connect(NULL, "iris", "_SYSTEM", "SYS", "localhost", 51774) +# connection <- DatabaseConnector::connect(NULL, "iris", "_SYSTEM", "SYS", "localhost", 51774, NULL, NULL, NULL, Sys.getenv("DATABASECONNECTOR_JAR")) +# connection <- DatabaseConnector::connect(connectionDetails) +# ParallelLogger::logTrace("connection succesfull!") + +# connection <- DatabaseConnector::connect(NULL, "iris", "SQLAdmin", "Welcome123!", NULL, NULL, NULL, NULL, "jdbc:IRIS://k8s-7dde6a84-a8a08f1d-624d64b975-b5e7efc5c79fe489.elb.us-east-1.amazonaws.com:443/USER/iris-jdbc.log:::true", Sys.getenv("DATABASECONNECTOR_JAR")) + +DatabaseConnector::renderTranslateQuerySql(connection, "SELECT 124 as \"test\"") + +# ParallelLogger::logTrace("so far so good!") + +DatabaseConnector::renderTranslateQuerySql(connection, "WITH x (abx) AS (SELECT 124 as ABX) SELECT * FROM x") + +sql <- "WITH rawData (x) AS (SELECT 123 AS x), summ AS (SELECT SUM(x) as s FROM rawData) CREATE TABLE ohdsi.t AS SELECT * FROM summ;" +SqlRender::translate(sql, "iris") +DatabaseConnector::renderTranslateExecuteSql(connection, sql) + + + +Sys.setenv("CDM_IRIS_USER" = "_SYSTEM") +Sys.setenv("CDM_IRIS_PASSWORD" = "SYS") +Sys.setenv("CDM_IRIS_CONNECTION_STRING" = "jdbc:IRIS://localhost:51774/OMOP") +Sys.setenv("CDM_IRIS_CDM53_SCHEMA" = "OMOP_CDM") +Sys.setenv("CDM_IRIS_OHDSI_SCHEMA" = "OMOP_Results") diff --git a/tests/testthat/test-sendUpdates.R b/tests/testthat/test-sendUpdates.R index 937b8a45..29109aa6 100644 --- a/tests/testthat/test-sendUpdates.R +++ b/tests/testthat/test-sendUpdates.R @@ -1,6 +1,7 @@ library(testthat) -sql <- "CREATE TABLE #temp (x INT); +sql <- "IF OBJECT_ID('tempdb..#temp', 'U') IS NOT NULL DROP TABLE #temp; + CREATE TABLE #temp (x INT); INSERT INTO #temp (x) SELECT 123; DELETE FROM #temp WHERE x = 123; DROP TABLE #temp;" @@ -11,8 +12,8 @@ for (testServer in testServers) { options(sqlRenderTempEmulationSchema = testServer$tempEmulationSchema) on.exit(dropEmulatedTempTables(connection)) on.exit(disconnect(connection), add = TRUE) - expect_equal(renderTranslateExecuteSql(connection, sql), c(0, 1, 1, 0)) - expect_equal(renderTranslateExecuteSql(connection, sql, runAsBatch = TRUE), c(0, 1, 1, 0)) + expect_equal(renderTranslateExecuteSql(connection, sql), c(0, 0, 1, 1, 0)) + expect_equal(renderTranslateExecuteSql(connection, sql, runAsBatch = TRUE), c(0, 0, 1, 1, 0)) rowsAffected <- dbSendStatement(connection, sql) expect_equal(dbGetRowsAffected(rowsAffected), 2) dbClearResult(rowsAffected) From 7880ca428e989a8f358ba302d6e55860ab15b91b Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 2 Jan 2025 15:27:11 +0100 Subject: [PATCH 16/20] reran roxygen --- DESCRIPTION | 2 +- ... dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd} | 6 +++--- man/downloadJdbcDrivers.Rd | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) rename man/{dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd => dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd} (94%) diff --git a/DESCRIPTION b/DESCRIPTION index 68b803cb..0d8d39a2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -55,6 +55,6 @@ VignetteBuilder: knitr URL: https://ohdsi.github.io/DatabaseConnector/, https://github.com/OHDSI/DatabaseConnector BugReports: https://github.com/OHDSI/DatabaseConnector/issues Copyright: See file COPYRIGHTS -RoxygenNote: 7.3.1 +RoxygenNote: 7.3.2 Roxygen: list(markdown = TRUE) Encoding: UTF-8 diff --git a/man/dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd b/man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd similarity index 94% rename from man/dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd rename to man/dbWriteTable-DatabaseConnectorConnection-ANY-method.Rd index b983e42e..04d6d5be 100644 --- a/man/dbWriteTable-DatabaseConnectorConnection-ANY-ANY-method.Rd +++ b/man/dbWriteTable-DatabaseConnectorConnection-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,ANY-method} -\alias{dbWriteTable,DatabaseConnectorConnection,ANY,ANY-method} +\name{dbWriteTable,DatabaseConnectorConnection,ANY-method} +\alias{dbWriteTable,DatabaseConnectorConnection,ANY-method} \title{Copy data frames to database tables} \usage{ -\S4method{dbWriteTable}{DatabaseConnectorConnection,ANY,ANY}( +\S4method{dbWriteTable}{DatabaseConnectorConnection,ANY}( conn, name, value, diff --git a/man/downloadJdbcDrivers.Rd b/man/downloadJdbcDrivers.Rd index 35443979..da71f659 100644 --- a/man/downloadJdbcDrivers.Rd +++ b/man/downloadJdbcDrivers.Rd @@ -41,12 +41,12 @@ Download the DatabaseConnector JDBC drivers from https://ohdsi.github.io/Databas \details{ The following versions of the JDBC drivers are currently used: \itemize{ -\item PostgreSQL: V42.2.18 +\item PostgreSQL: V42.7.3 \item RedShift: V2.1.0.9 \item SQL Server: V9.2.0 \item Oracle: V19.8 -\item Spark: V2.6.21 -\item Snowflake: V3.13.22 +\item Spark (Databricks): V2.6.36 +\item Snowflake: V3.16.01 \item BigQuery: v1.3.2.1003 \item InterSystems IRIS: v3.9.0 } From 57a246986f480f1d92d332c0301cac9bd12691dc Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 2 Jan 2025 15:53:10 +0100 Subject: [PATCH 17/20] reran pkgdown reran pkgdown for Connecting.Rmd only and stuck with CSS / JS versions of other files for consistency, just to pick up fresht content. --- docs/articles/Connecting.html | 92 +++++++++++++++++++++++++++++------ 1 file changed, 77 insertions(+), 15 deletions(-) diff --git a/docs/articles/Connecting.html b/docs/articles/Connecting.html index e5169dfe..6093fee8 100644 --- a/docs/articles/Connecting.html +++ b/docs/articles/Connecting.html @@ -19,7 +19,7 @@ - +
@@ -45,7 +45,7 @@
- +
@@ -91,7 +91,7 @@

Connecting to a database

Martijn J. Schuemie

-

2023-12-11

+

2025-01-02

Source: vignettes/Connecting.Rmd @@ -120,6 +120,7 @@

Introduction @@ -176,10 +177,11 @@

-

Obtaining drivers for Netezza and Impala +

Obtaining drivers for Netezza, Impala and InterSystems IRIS

-

Because of licensing reasons the drivers for BigQuery, Netezza and -Impala are not included but must be obtained by the user. see these +

Because of licensing reasons the drivers for BigQuery, Netezza, +Impala and InterSystems IRIS are not included but must be obtained by +the user. see these instructions on how to download these drivers, which you can also see by typing ?jdbcDrivers.

@@ -267,13 +269,73 @@

Connecting to a SQLite databaseinsertTable(connection = conn, tableName = "cars", data = cars)

-
## Inserting data took 0.0271 secs
+
## Inserting data took 0.0247 secs
 querySql(conn, "SELECT COUNT(*) FROM main.cars;")
+
## Warning in fun(libname, pkgname): Java library version does not match R package version! Please try reinstalling the SqlRender package.
+##             Make sure to close all instances of R, and open only one instance before reinstalling. Also make sure your
+##             R workspace is not reloaded on startup. Delete your .Rdata file if necessary
##   COUNT(*)
 ## 1       50
-
+
 disconnect(conn)
+
+
+

Connecting with Windows authentication from a non-windows +machine +

+

Kerberos is used by Active Directory, you need to have the +appropriate packages installed on your client machine. For MacOS, the +Kerberos packages are usually already installed. On Linux, you’ll have +to install krb5-user. Most of this setup comes from this +site.

+
    +
  1. +

    On the non-windows client machine, create or update +/etc/krb5.conf so that it points to your AD server. Here’s +an example of krb5.conf:

    +
    [libdefaults]
    +default_realm = DOMAIN.COMPANY.COM
    +
    +[realms]
    +DOMAIN.COMPANY.COM = {
    +  kdc = dc-33.domain.company.com
    +}
    +
  2. +
  3. Run kinit <username>@DOMAIN.COMPANY.COM to get +a ticket granting ticket from the kerberos domain controller (KDC). +(NOTE: you want to make sure your KDC is accessible from your +machine)

  4. +
  5. Download the latest MSSql +JDBC driver.

  6. +
  7. +

    Try to connect to the database with the following code in +RStudio:

    +
    library(devtools)
    +library(DatabaseConnector)
    +connectionDetails <- createConnectionDetails(
    +  dbms="sql server", 
    +  ...
    +  extraSettings="authenticationScheme=JavaKerberos")
    +c <- connect(connectionDetails = connectionDetails)
    +

    In RStudio, you should see that the variable c has a value and the +new connection in the connections tab as well.

    +
  8. +
+

Note: If you are getting the below error on Mac:

+
+

Error in rJava::.jcall(jdbcDriver, “Ljava/sql/Connection;”, +“connect”, : com.microsoft.sqlserver.jdbc.SQLServerException: Kerberos +Login failed: Integrated authentication failed. +ClientConnectionId:13fb0d4e-4822-4de2-a125-8408334cb3ed due to +javax.security.auth.login.LoginException (Cannot get any of properties: +[user, USER] from con properties not available to garner authentication +information from the user)

+
+

Instead of kinit you can also try +/System/Library/CoreServices and find ‘Ticket Viewer’ Click +‘Add Identity’, then enter your user name. After you click ‘Continue’, a +Kerberos ticket should have been generated.

@@ -281,7 +343,7 @@

Connecting to a SQLite database

Contents

- + @@ -294,16 +356,16 @@

Connecting to a SQLite database

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.1.1.

- - + + From 2ac302c6514daa031de60491f1244a663d5471b3 Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Thu, 2 Jan 2025 17:48:25 +0100 Subject: [PATCH 18/20] update IRIS driver, pull from Maven --- R/Drivers.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/Drivers.R b/R/Drivers.R index d74ae967..581ffef3 100644 --- a/R/Drivers.R +++ b/R/Drivers.R @@ -49,7 +49,7 @@ jdbcDrivers <- new.env() #' - Spark (Databricks): V2.6.36 #' - Snowflake: V3.16.01 #' - BigQuery: v1.3.2.1003 -#' - InterSystems IRIS: v3.9.0 +#' - InterSystems IRIS: v3.10.2 #' #' @return Invisibly returns the destination if the download was successful. #' @export @@ -99,7 +99,7 @@ downloadJdbcDrivers <- function(dbms, pathToDriver = Sys.getenv("DATABASECONNECT 5,spark,DatabricksJDBC42-2.6.36.1062.zip,https://databricks-bi-artifacts.s3.us-east-2.amazonaws.com/simbaspark-drivers/jdbc/2.6.36/ 6,snowflake,snowflake-jdbc-3.16.1.jar,https://repo1.maven.org/maven2/net/snowflake/snowflake-jdbc/3.16.1/ 7,bigquery,SimbaBigQueryJDBC42-1.3.2.1003.zip,https://storage.googleapis.com/simba-bq-release/jdbc/ - 8,iris,intersystems-jdbc-3.9.0.jar,https://github.com/intersystems-community/iris-driver-distribution/raw/refs/heads/main/JDBC/JDK18/" + 8,iris,intersystems-jdbc-3.10.2.jar,https://repo1.maven.org/maven2/com/intersystems/intersystems-jdbc/3.10.2/" ) if (dbms == "all") { dbms <- jdbcDriverSources$dbms From d6cc1658b77268e37d76b2c57c7a808762dfef06 Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Mon, 27 Jan 2025 16:37:15 +0100 Subject: [PATCH 19/20] remove stray test file --- tests/testthat/test-bdb.R | 50 --------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 tests/testthat/test-bdb.R diff --git a/tests/testthat/test-bdb.R b/tests/testthat/test-bdb.R deleted file mode 100644 index 3d4f4f05..00000000 --- a/tests/testthat/test-bdb.R +++ /dev/null @@ -1,50 +0,0 @@ -library(usethis) -library(devtools) -#library(ParallelLogger) -#load_all("C:/Users/bdeboe/Github/intersystems-community/OHDSI-SqlRender", TRUE, TRUE, TRUE, TRUE, TRUE) -#.jaddClassPath("C:/Users/bdeboe/Github/intersystems-community/OHDSI-SqlRender/target/SqlRender-1.19.0-SNAPSHOT.jar") -load_all("C:/Users/bdeboe/Github/intersystems-community/OHDSI-DatabaseConnector", TRUE, TRUE, TRUE, TRUE, TRUE) - -#Sys.setenv(DATABASECONNECTOR_JAR = "C:\\InterSystems\\SQLML\\dev\\java\\lib\\1.8") -#options(LOG_DATABASECONNECTOR_SQL = TRUE) -# assign("noLogging", FALSE, envir = globalVars) -# logger<-createLogger(name="SIMPLE", threshold="TRACE", appenders=list(createConsoleAppender(layout=layoutTimestamp))) - -# ParallelLogger::logTrace("Trace this!") - -Sys.setenv("DATABASECONNECTOR_JAR_FOLDER" = "C:\\tmp\\ohdsi") -downloadJdbcDrivers("iris") - -connectionDetails <- createConnectionDetails( - dbms = "iris", - server = "localhost", - port = 51774, - database = "OMOP2", - user = "_SYSTEM", - password = "SYS" -) - -connection <- DatabaseConnector::connect(NULL, "iris", "_SYSTEM", "SYS", "localhost", 51774) -# connection <- DatabaseConnector::connect(NULL, "iris", "_SYSTEM", "SYS", "localhost", 51774, NULL, NULL, NULL, Sys.getenv("DATABASECONNECTOR_JAR")) -# connection <- DatabaseConnector::connect(connectionDetails) -# ParallelLogger::logTrace("connection succesfull!") - -# connection <- DatabaseConnector::connect(NULL, "iris", "SQLAdmin", "Welcome123!", NULL, NULL, NULL, NULL, "jdbc:IRIS://k8s-7dde6a84-a8a08f1d-624d64b975-b5e7efc5c79fe489.elb.us-east-1.amazonaws.com:443/USER/iris-jdbc.log:::true", Sys.getenv("DATABASECONNECTOR_JAR")) - -DatabaseConnector::renderTranslateQuerySql(connection, "SELECT 124 as \"test\"") - -# ParallelLogger::logTrace("so far so good!") - -DatabaseConnector::renderTranslateQuerySql(connection, "WITH x (abx) AS (SELECT 124 as ABX) SELECT * FROM x") - -sql <- "WITH rawData (x) AS (SELECT 123 AS x), summ AS (SELECT SUM(x) as s FROM rawData) CREATE TABLE ohdsi.t AS SELECT * FROM summ;" -SqlRender::translate(sql, "iris") -DatabaseConnector::renderTranslateExecuteSql(connection, sql) - - - -Sys.setenv("CDM_IRIS_USER" = "_SYSTEM") -Sys.setenv("CDM_IRIS_PASSWORD" = "SYS") -Sys.setenv("CDM_IRIS_CONNECTION_STRING" = "jdbc:IRIS://localhost:51774/OMOP") -Sys.setenv("CDM_IRIS_CDM53_SCHEMA" = "OMOP_CDM") -Sys.setenv("CDM_IRIS_OHDSI_SCHEMA" = "OMOP_Results") From 7badb9641b448b9f7ddfcc40a376c8682191f2e0 Mon Sep 17 00:00:00 2001 From: Benjamin De Boe Date: Mon, 27 Jan 2025 16:38:57 +0100 Subject: [PATCH 20/20] use SqlRender 1.19.1 --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 18807f51..e51399ec 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -21,7 +21,7 @@ Depends: R (>= 4.0.0) Imports: rJava, - SqlRender (>= 1.19.0), + SqlRender (>= 1.19.1), methods, stringr, readr,