Changelog
Source:NEWS.md
DBI 1.2.3 (2024-06-02)
Bug fixes
-
dbQuoteLiteral()
uses the format"%Y-%m-%d %H-%M-%S%z"
which is understood by more databases (#467, #474).
Documentation
- Use relational-data.org as a replacement for relational.fit.cvut.cz.
- Set BS version explicitly for now (@maelle, #478).
- Include
dbGetInfo()
in the spec (#477). - Fix typos (@salim-b, #469, @MichaelChirico, #482).
DBI 1.2.1 (2024-01-12)
Bug fixes
Fix
dbWriteTableArrow()
according to spec (#457).Fix type inference in default method for
dbCreateTableArrow()
(#450).
Features
dbAppendTableArrow()
returns number of rows (#454).Add
temporary
argument todbCreateTableArrow()
(#453).Avoid coercing
params
in default implementation fordbSendQueryArrow()
(#447).Use
nanoarrow::infer_nanoarrow_schema()
in the default method fordbCreateTable()
(#445).
Chore
Add badge to
DBIResultArrow
class (#452).Change maintainer e-mail.
DBI 1.2.0 (2023-12-20)
Breaking changes
-
dbUnquoteIdentifier()
createsId()
objects without component names and allows non-NA
character input (#421, #422).
Features
New generics
dbSendQueryArrow()
,dbFetchArrow()
,dbGetQueryArrow()
,dbReadTableArrow()
,dbWriteTableArrow()
(@nbenn, #390),dbCreateTableArrow()
,dbAppendTableArrow()
(#396),dbBindArrow()
(#415) anddbFetchArrowChunk()
(#424), with default implementations via nanoarrow (#414).Id()
now accepts unnamed components (#417). If names are provided, the components are arranged in SQL order (@eauleaf, #427).New
dbIsValid()
method for"DBIResultArrowDefault"
objects implemented by DBI (#425).Implement
dbiDataType()
for objects of class"blob"
.
DBI 1.1.3 (2022-06-18)
Features
-
dbAppendTable()
acceptsId
(#381, @renkun-ken).
Documentation
?dbSendQuery
and related methods gain a section “The data retrieval flow” (#386).?dbSendStatement
and related methods gain a section “The command execution flow” (#386).
DBI 1.1.2 (2021-12-19)
Features
- Use
dbQuoteLiteral()
in default method forsqlData()
(#362, #371). - Update specification with changes from DBItest 1.7.2 (#367).
Documentation
- The pkgdown documentation for DBI generics (e.g.
?dbConnect
) contains clickable links to all known backends (except ROracle), and an explanatory sentence (#360). -
?Id
gains better examples (#295, #370). - Elaborate on status of
dbWriteTable()
in the documentation (#352, #372). - Make method definition more similar to S3. All
setMethod()
calls refer to top-level functions (#368). -
?dbReadTable
and other pages gain pointers toId()
andSQL()
(#359).
DBI 1.1.1 (2021-01-04)
Bug fixes
-
dbAppendTable()
now allows columns namedsep
(#336). -
dbAppendTable()
shows a better error message if the input has zero columns (#313). -
sqlInterpolate()
now correctly interprets consecutive comments (#329, @rnorberg). -
dbQuoteLiteral()
works for difftime objects (#325). -
dbQuoteLiteral()
quotes dates asYYYY-MM-DD
without time zone (#331).
Internal
- Switch to GitHub Actions (#326).
- Update URL in
DESCRIPTION
.
DBI 1.1.0 (2019-12-15)
New features
New
DBIConnector
class (#280).Specify
immediate
argument todbSendQuery()
,dbGetQuery()
,dbSendStatement()
anddbExecute()
(#268).Use specification for
dbGetInfo()
(#271).dbUnquoteIdentifier()
now supportsId()
objects withcatalog
members (#266, @raffscallion). It also handles unquoted identifiers of the formtable
,schema.table
orcatalog.schema.table
, for compatibility with dbplyr.
Documentation
New DBI intro article (#286, @cutterkom).
Add pkgdown reference index (#288).
DBI specification on https://dbi.r-dbi.org/dev/articles/spec now comes with a table of contents and code formatting.
Update examples to refer to
params
instead ofparam
(#235).Improved documentation for
sqlInterpolate()
(#100). Add usage ofSQL()
tosqlInterpolate()
examples (#259, @renkun-ken).Improve documentation for
Id
.
Internal
Add tests for
dbUnquoteIdentifier()
(#279, @baileych).sqlInterpolate()
usesdbQuoteLiteral()
instead of checking the type of the input.Avoid partial argument match in
dbWriteTable()
(#246, @richfitz).
DBI 1.0.0 (2018-05-02)
New generics
- New
dbAppendTable()
that by default callssqlAppendTableTemplate()
and thendbExecute()
with aparam
argument, without support forrow.names
argument (#74). - New
dbCreateTable()
that by default callssqlCreateTable()
and thendbExecute()
, without support forrow.names
argument (#74). - New
dbCanConnect()
generic with default implementation (#87). - New
dbIsReadOnly()
generic with default implementation (#190, @anhqle).
Changes
-
sqlAppendTable()
now accepts lists for thevalues
argument, to support lists ofSQL
objects in R 3.1. - Add default implementation for
dbListFields(DBIConnection, Id)
, this relies ondbQuoteIdentifier(DBIConnection, Id)
(#75).
Documentation updates
- The DBI specification vignette is rendered correctly from the installed package (#234).
- Update docs on how to cope with stored procedures (#242, @aryoda).
- Add “Additional arguments” sections and more examples for
dbGetQuery()
,dbSendQuery()
,dbExecute()
anddbSendStatement()
. - The
dbColumnInfo()
method is now fully specified (#75). - The
dbListFields()
method is now fully specified (#75). - The dynamic list of methods in help pages doesn’t contain methods in DBI anymore.
Bug fixes
- Pass missing
value
argument to secondarydbWriteTable()
call (#737, @jimhester). - The
Id
class now uses<Id>
and not<Table>
when printing. - The default
dbUnquoteIdentifier()
implementation now complies to the spec.
DBI 0.8 (2018-02-24)
Breaking changes
-
SQL()
now strips the names from the output if thenames
argument is unset. - The
dbReadTable()
,dbWriteTable()
,dbExistsTable()
,dbRemoveTable()
, anddbListFields()
generics now specialize over the first two arguments to support implementations with theId
S4 class as type for the second argument. Some packages may need to update their documentation to satisfy R CMD check again.
New generics
- Schema support: Export
Id()
, new genericsdbListObjects()
anddbUnquoteIdentifier()
, methods forId
that calldbQuoteIdentifier()
and then forward (#220). - New
dbQuoteLiteral()
generic. The default implementation uses switchpatch to avoid dispatch ambiguities, and forwards todbQuoteString()
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).
Default implementations
- Default implementations of
dbQuoteIdentifier()
anddbQuoteLiteral()
preserve names, default implementation ofdbQuoteString()
strips names (#173). - Specialized methods for
dbQuoteString()
anddbQuoteIdentifier()
are available again, for compatibility with clients that usegetMethod()
to access them (#218). - Add default implementation of
dbListFields()
. - The default implementation of
dbReadTable()
now hasrow.names = FALSE
as default and also supportsrow.names = NULL
(#186).
API changes
- The
SQL()
function gains an optionalnames
argument which can be used to assign names to SQL strings.
Deprecated generics
-
dbListConnections()
is soft-deprecated by documentation. -
dbListResults()
is deprecated by documentation (#58). -
dbGetException()
is soft-deprecated by documentation (#51). - The deprecated
print.list.pairs()
has been removed.
Bug fixes
- Fix
dbDataType()
forAsIs
object (#198, @yutannihilation). - Fix
dbQuoteString()
anddbQuoteIdentifier()
to ignore invalid UTF-8 strings (r-dbi/DBItest#156).
Documentation
- Help pages for generics now contain a dynamic list of methods implemented by DBI backends (#162).
-
sqlInterpolate()
now supports both named and positional variables (#216, @hannesmuehleisen). - Point to db.rstudio.com (@wibeasley, #209).
- Reflect new ‘r-dbi’ organization in
DESCRIPTION
(@wibeasley, #207).
Internal
- Using switchpatch on the second argument for default implementations of
dbQuoteString()
anddbQuoteIdentifier()
.
DBI 0.7 (2017-06-17)
- Import updated specs from
DBItest
. - The default implementation of
dbGetQuery()
now accepts ann
argument and forwards it todbFetch()
. No warning about pending rows is issued anymore (#76). - Require R >= 3.0.0 (for
slots
argument ofsetClass()
) (#169, @mvkorpel).
DBI 0.6-1 (2017-04-01)
- Fix
dbReadTable()
for backends that do not provide their own implementation (#171).
DBI 0.6 (2017-03-08)
- Interface changes
- Deprecated
dbDriver()
anddbUnloadDriver()
by documentation (#21). - Renamed arguments to
sqlInterpolate()
andsqlParseVariables()
to be more consistent with the rest of the interface, and added.dots
argument tosqlParseVariables
. DBI drivers are now expected to implementsqlParseVariables(conn, sql, ..., .dots)
andsqlInterpolate(conn, sql, ...)
(#147).
- Deprecated
- Interface enhancements
- Removed
valueClass = "logical"
for those generics where the return value is meaningless, to allow backends to return invisibly (#135). - Avoiding using braces in the definitions of generics if possible, so that standard generics can be detected (#146).
- Added default implementation for
dbReadTable()
. - All standard generics are required to have an ellipsis (with test), for future extensibility.
- Improved default implementation of
dbQuoteString()
anddbQuoteIdentifier()
(#77). - Removed
tryCatch()
call indbGetQuery()
(#113).
- Removed
- Documentation improvements
- Finalized first draft of DBI specification, now in a vignette.
- Most methods now draw documentation from
DBItest
, only those where the behavior is not finally decided don’t do this yet yet. - Removed
max.connections
requirement from documentation (#56). - Improved
dbBind()
documentation and example (#136). - Change
omegahat.org
URL toomegahat.net
, the particular document still doesn’t exist below the new domain.
- Internal
- Use roxygen2 inheritance to copy DBI specification to this package.
- Use
tic
package for building documentation. - Use markdown in documentation.
DBI 0.5 (2016-08-11, CRAN release)
- Interface changes
-
dbDataType()
mapscharacter
values to"TEXT"
by default (#102). - The default implementation of
dbQuoteString()
doesn’t callencodeString()
anymore: Neither SQLite nor Postgres understand e.g.\n
in a string literal, and all of SQLite, Postgres, and MySQL accept an embedded newline (#121).
-
- Interface enhancements
- New
dbSendStatement()
generic, forwards todbSendQuery()
by default (#20, #132). - New
dbExecute()
, callsdbSendStatement()
by default (#109, @bborgesr). - New
dbWithTransaction()
that callsdbBegin()
anddbCommit()
, anddbRollback()
on failure (#110, @bborgesr). - New
dbBreak()
function which allows aborting from withindbWithTransaction()
(#115, #133). - Export
dbFetch()
anddbQuoteString()
methods.
- New
- Documentation improvements:
- One example per function (except functions scheduled for deprecation) (#67).
- Consistent layout and identifier naming.
- Better documentation of generics by adding links to the class and related generics in the “See also” section under “Other DBI… generics” (#130). S4 documentation is directed to a hidden page to unclutter documentation index (#59).
- Fix two minor vignette typos (#124, @mdsumner).
- Add package documentation.
- Remove misleading parts in
dbConnect()
documentation (#118). - Remove misleading link in
dbDataType()
documentation. - Remove full stop from documentation titles.
- New help topic “DBIspec” that contains the full DBI specification (currently work in progress) (#129).
- HTML documentation generated by
staticdocs
is now uploaded to https://rstats-db.github.io/DBI for each build of the “production” branch (#131). - Further minor changes and fixes.
- Internal
- Use
contains
argument instead ofrepresentation()
to denote base classes (#93). - Remove redundant declaration of transaction methods (#110, @bborgesr).
- Use
DBI 0.4-1 (2016-05-07, CRAN release)
- The default
show()
implementations silently ignore all errors. Some DBI drivers (e.g., RPostgreSQL) might fail to implementdbIsValid()
or the other methods used.
DBI 0.4 (2016-04-30)
New package maintainer: Kirill Müller.
dbGetInfo()
gains a default method that extracts the information fromdbGetStatement()
,dbGetRowsAffected()
,dbHasCompleted()
, anddbGetRowCount()
. This means that most drivers should no longer need to implementdbGetInfo()
(which may be deprecated anyway at some point) (#55).dbDataType()
anddbQuoteString()
are now properly exported.The default implementation for
dbDataType()
(powered bydbiDataType()
) now also supportsdifftime
andAsIs
objects and lists ofraw
(#70).Default
dbGetQuery()
method now always callsdbFetch()
, in atryCatch()
block.New generic
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.
sqlCreateTable()
andsqlAppendTable()
create tables from a data frame and insert rows into an existing table. These will power most implementations ofdbWriteTable()
.sqlAppendTable()
is useful for databases that support parameterised queries.sqlRownamesToColumn()
andsqlColumnToRownames()
provide a standard way of translating row names to and from the database.sqlInterpolate()
andsqlParseVariables()
allows databases without native parameterised queries to use parameterised queries to avoid SQL injection attacks.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.The
sqlParseVariablesImpl()
is now implemented purely in R, with full test coverage (#83, @hannesmuehleisen).
dbiCheckCompliance()
has been removed, the functionality is now available in theDBItest
package (#80).Added default
show()
methods for driver, connection and results.New concrete
ANSIConnection
class andANSI()
function to generate a dummy ANSI compliant connection useful for testing.Default
dbQuoteString()
anddbQuoteIdentifer()
methods now useencodeString()
so that special characters like\n
are correctly escaped.dbQuoteString()
convertsNA
to (unquoted) NULL.The initial DBI proposal and DBI version 1 specification are now included as a vignette. These are there mostly for historical interest.
The new
DBItest
package is described in the vignette.Deprecated
print.list.pairs()
.Removed unused
dbi_dep()
.
Version 0.3.1
Actually export
dbIsValid()
:/dbGetQuery()
usesdbFetch()
in the default implementation.
Version 0.3.0
New and enhanced generics
dbIsValid()
returns a logical value describing whether a connection or result set (or other object) is still valid. (#12).dbQuoteString()
anddbQuoteIdentifier()
to implement database specific quoting mechanisms.dbFetch()
added as alias tofetch()
to provide consistent name. Implementers should define methods for bothfetch()
anddbFetch()
untilfetch()
is deprecated in 2015. For now, the default method fordbFetch()
callsfetch()
.dbBegin()
begins a transaction (#17). If not supported, DB specific methods should throw an error (as shoulddbCommit()
anddbRollback()
).
New default methods
dbGetStatement()
,dbGetRowsAffected()
,dbHasCompleted()
, anddbGetRowCount()
gain default methods that extract the appropriate elements fromdbGetInfo()
. This means that most drivers should no longer need to implement these methods (#13).dbGetQuery()
gains a default method forDBIConnection
which usesdbSendQuery()
,fetch()
anddbClearResult()
.
Deprecated features
-
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.
make.db.names()
,isSQLKeyword()
andSQLKeywords()
: a black list based approach is fundamentally flawed; instead quote strings and identifiers withdbQuoteIdentifier()
anddbQuoteString()
.
dbGetDBIVersion()
is deprecated since it’s now just a thin wrapper aroundpackageVersion("DBI")
.dbSetDataMappings()
(#9) anddbCallProc()
(#7) are deprecated as no implementations were ever provided.
Other improvements
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!
Version 0.2-5
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 ‘“’.
Version 0.1-7
- Had to do a substantial re-formatting of the documentation due to incompatibilities introduced in 1.8.0 S4 method documentation. The contents were not changed (modulo fixing a few typos). Thanks to Kurt Hornik and John Chambers for their help.
Version 0.1-4
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).