SQL()now strips the names from the output if the
namesargument is unset.
dbListFields()generics now specialize over the first two arguments to support implementations with the
IdS4 class as type for the second argument. Some packages may need to update their documentation to satisfy R CMD check again.
Id(), new generics
dbUnquoteIdentifier(), methods for
dbQuoteIdentifier()and then forward (#220).
dbQuoteLiteral()generic. The default implementation uses switchpatch to avoid dispatch ambiguities, and forwards to
dbQuoteString()for character vectors. Backends may override methods that also dispatch on the second argument, but in this case also an override for the
"SQL"class is necessary (#172).
dbQuoteLiteral()preserve names, default implementation of
dbQuoteString()strips names (#173).
dbQuoteIdentifier()are available again, for compatibility with clients that use
getMethod()to access them (#218).
row.names = FALSEas default and also supports
row.names = NULL(#186).
SQL()function gains an optional
namesargument which can be used to assign names to SQL strings.
sqlInterpolate()now supports both named and positional variables (#216, @hannesmuehleisen).
dbReadTable()for backends that do not provide their own implementation (#171).
dbUnloadDriver()by documentation (#21).
sqlParseVariables()to be more consistent with the rest of the interface, and added
sqlParseVariables. DBI drivers are now expected to implement
sqlParseVariables(conn, sql, ..., .dots)and
sqlInterpolate(conn, sql, ...)(#147).
valueClass = "logical"for those generics where the return value is meaningless, to allow backends to return invisibly (#135).
DBItest, only those where the behavior is not finally decided don’t do this yet yet.
max.connectionsrequirement from documentation (#56).
dbBind()documentation and example (#136).
omegahat.net, the particular document still doesn’t exist below the new domain.
ticpackage for building documentation.
dbSendStatement()generic, forwards to
dbSendQuery()by default (#20, #132).
dbSendStatement()by default (#109, @bborgesr).
dbRollback()on failure (#110, @bborgesr).
dbBreak()function which allows aborting from within
staticdocsis now uploaded to http://rstats-db.github.io/DBI for each build of the “production” branch (#131).
containsargument instead of
representation()to denote base classes (#93).
show()implementations silently ignore all errors. Some DBI drivers (e.g., RPostgreSQL) might fail to implement
dbIsValid()or the other methods used.
New package maintainer: Kirill Müller.
dbGetInfo() gains a default method that extracts the information from
dbGetRowCount(). This means that most drivers should no longer need to implement
dbGetInfo() (which may be deprecated anyway at some point) (#55).
The default implementation for
dbDataType() (powered by
dbiDataType()) now also supports
AsIs objects and lists of
dbBind() for binding values to a parameterised query.
DBI gains a number of SQL generation functions. These make it easier to write backends by implementing common operations that are slightly tricky to do absolutely correctly.
sqlAppendTable() create tables from a data frame and insert rows into an existing table. These will power most implementations of
sqlAppendTable() is useful for databases that support parameterised queries.
sqlData() is a new generic that converts a data frame into a data frame suitable for sending to the database. This is used to (e.g.) ensure all character vectors are encoded as UTF-8, or to convert R varible types (like factor) to types supported by the database.
sqlParseVariablesImpl() is now implemented purely in R, with full test coverage (#83, @hannesmuehleisen).
dbiCheckCompliance() has been removed, the functionality is now available in the
DBItest package (#80).
show() methods for driver, connection and results.
ANSIConnection class and
ANSI() function to generate a dummy ANSI compliant connection useful for testing.
The initial DBI proposal and DBI version 1 specification are now included as a vignette. These are there mostly for historical interest.
DBItest package is described in the vignette.
dbIsValid() returns a logical value describing whether a connection or result set (or other object) is still valid. (#12).
dbFetch() added as alias to
fetch() to provide consistent name. Implementers should define methods for both
fetch() is deprecated in 2015. For now, the default method for
dbGetRowCount() gain default methods that extract the appropriate elements from
dbGetInfo(). This means that most drivers should no longer need to implement these methods (#13).
The following functions are soft-deprecated. They are going away, and developers who use the DBI should begin preparing. The formal deprecation process will begin in July 2015, where these function will emit warnings on use.
dbGetDBIVersion() is deprecated since it’s now just a thin wrapper around
dbiCheckCompliance() makes it easier for implementors to check that their package is in compliance with the DBI specification.
All examples now use the RSQLite package so that you can easily try out the code samples (#4).
dbDriver() gains a more effective search mechanism that doesn’t rely on packages being loaded (#1).
DBI has been converted to use roxygen2 for documentation, and now most functions have their own documentation files. I would love your feedback on how we could make the documentation better!
Code cleanups contributed by Matthias Burger: avoid partial argument name matching and use TRUE/FALSE, not T/F.
Change behavior of make.db.names.default to quote SQL keywords if allow.keywords is FALSE. Previously, SQL keywords would be name mangled with underscores and a digit. Now they are quoted using ’“’.
Removed the “valueClass” from some generic functions, namely, dbListConnections, dbListResults, dbGetException, dbGetQuery, and dbGetInfo. The reason is that methods for these generics could potentially return different classes of objects (e.g., the call dbGetInfo(res) could return a list of name-value pairs, while dbGetInfo(res, “statement”) could be a character vector).
Added 00Index to inst/doc
Added dbGetDBIVersion() (simple wrapper to package.description).