For version 0.15.0 and above, see Releases page.
- BREAKING CHANGE:
ToSql
implementation fortime::Timespec
uses RFC 3339 (%Y-%m-%dT%H:%M:%S.%fZ). Previous format was %Y-%m-%d %H:%M:%S:%f %Z. - BREAKING CHANGE: Remove potentially conflicting impl of ToSqlOutput (#313).
- BREAKING CHANGE: Replace column index/count type (i32) with usize.
- BREAKING CHANGE: Replace parameter index/count type (i32) with usize.
- BREAKING CHANGE: Replace row changes/count type (i32) with usize.
- BREAKING CHANGE: Scalar functions must be
Send
able and'static
. - Bugfix: Commit failure unhandled, database left in unusable state (#366).
- Bugfix:
free_boxed_hook
does not work forfn
. - Update the bundled SQLite version to 3.24.0 (#326).
- Add DropBehavior::Panic to enforce intentional commit or rollback.
- Implement
sqlite3_update_hook
(#260, #328),sqlite3_commit_hook
andsqlite3_rollback_hook
. - Add support to unlock notification behind
unlock_notify
feature (#294, #331). - Make
Statement::column_index
case-insensitive (#330). - Add comment to justify
&mut Connection
inTransaction
. - Fix
tyvar_behind_raw_pointer
warnings. - Fix handful of clippy warnings.
- Fix
Connection::open
documentation (#332) - Add binding to
sqlite3_get_autocommit
andsqlite3_stmt_busy
. - Add binding to
sqlite3_busy_timeout
andsqlite3_busy_handler
. - Add binding to
sqlite3_expanded_sql
. - Use
rerun-if-env-changed
in libsqlite3-sys (#329). - Return an
InvalidQuery
error when SQL is not read only.
- Added ToSqlConversionFailure case to Error enum.
- Now depends on chrono 0.4, bitflags 1.0, and (optionally) cc 1.0 / bindgen 0.31.
- The ToSql/FromSql implementations for time::Timespec now include and expect fractional seconds and timezone in the serialized string.
- The RowIndex type used in Row::get is now publicly exported.
- New
sqlcipher
feature allows linking against SQLCipher instead of SQLite. - Doc link in README now point to docs.rs.
- Defines HAVE_USLEEP when building with a bundled SQLite (#263).
- Updates dependencies to their latest versions, particularly serde to 1.0.
- Adds support for vcpkg on Windows.
- Adds
ToSql
impls forstr
and[u8]
.
- Avoid publicly exporting SQLite constants multiple times from libsqlite3-sys.
- Adds
FromSql
andToSql
impls forisize
. Documents whyusize
andu64
are not included.
- Updates the
bundled
SQLite version to 3.17.0. - Changes the build process to no longer require
bindgen
. This should improve build times and no longer require a new-ish Clang. See the README for more details.
- Re-export the
ErrorCode
enum fromlibsqlite3-sys
. - Adds
version()
andversion_number()
functions for querying the version of SQLite in use. - Adds the
limits
feature, exposinglimit()
andset_limit()
methods onConnection
. - Updates to
libsqlite3-sys
0.7.0, which runs rust-bindgen at build-time instead of assuming the presence of all expected SQLite constants and functions. - Clarifies supported SQLite versions. Running with SQLite older than 3.6.8 now panics, and some features will not compile unless a sufficiently-recent SQLite version is used. See the README for requirements of particular features.
- When running with SQLite 3.6.x, rusqlite attempts to perform SQLite initialization. If it fails,
rusqlite will panic since it cannot ensure the threading mode for SQLite. This check can be
skipped by calling the unsafe function
rusqlite::bypass_sqlite_initialization()
. This is technically a breaking change but is unlikely to affect anyone in practice, since prior to this version the check that rusqlite was using would cause a segfault if linked against a SQLite older than 3.7.0. - rusqlite now performs a one-time check (prior to the first connection attempt) that the runtime
SQLite version is at least as new as the SQLite version found at buildtime. This check can be
skipped by calling the unsafe function
rusqlite::bypass_sqlite_version_check()
. - Removes the
libc
dependency in favor of usingstd::os::raw
- Add impls of
Clone
,Debug
, andPartialEq
toToSqlOutput
.
- Update dependencies.
- Make
ToSqlOutput
itself implementToSql
.
- Bugfix: The
FromSql
impl fori32
now returns an error instead of truncating if the underlying SQLite value is out ofi32
's range. - Added
FromSql
andToSql
impls fori8
,i16
,u8
,u16
, andu32
.i32
andi64
already had impls.u64
is omitted because their range cannot be represented byi64
, which is the type we use to communicate with SQLite.
- BREAKING CHANGE:
Connection::close()
now returns aResult<(), (Connection, Error)>
instead of aResult<(), Error>
so callers get the still-open connection back on failure.
- BREAKING CHANGE: The
FromSql
trait has been redesigned. It now requires a single, safe method instead of the previous definition which required implementing one or two unsafe methods. - BREAKING CHANGE: The
ToSql
trait has been redesigned. It can now be implemented withoutunsafe
, and implementors can choose to return either borrowed or owned results. - BREAKING CHANGE: The closure passed to
query_row
,query_row_and_then
,query_row_safe
, andquery_row_named
now expects a&Row
instead of aRow
. The vast majority of calls to these functions will probably not need to change; see https://github.com/jgallagher/rusqlite/pull/184. - BREAKING CHANGE: A few cases of the
Error
enum have sprouted additional information (e.g.,FromSqlConversionFailure
now also includes the column index and the type returned by SQLite). - Added
#[deprecated(since = "...", note = "...")]
flags (new in Rust 1.9 for libraries) to all deprecated APIs. - Added
query_row
convenience function toStatement
. - Added
bundled
feature which will build SQLite from source instead of attempting to link against a SQLite that already exists on the system. - Fixed a bug where using cached prepared statements resulted in attempting to close a connection
failing with
DatabaseBusy
; see https://github.com/jgallagher/rusqlite/issues/186.
- Fixes an incorrect failure from the
insert()
convenience function when back-to-back inserts to different tables both returned the same row ID (#171).
- BREAKING CHANGE:
Rows
no longer implementsIterator
. It still has anext()
method, but the lifetime of the returnedRow
is now tied to the lifetime of the vendingRows
object. This behavior is more correct. Previously there were runtime checks to prevent misuse, but other changes in this release to reset statements as soon as possible introduced yet another hazard related to the lack of these lifetime connections. We were already recommending the use ofquery_map
andquery_and_then
over rawquery
; both of those still return handles that implementIterator
. - BREAKING CHANGE:
Transaction::savepoint()
now returns aSavepoint
instead of anotherTransaction
. UnlikeTransaction
,Savepoint
s can be rolled back while keeping the current savepoint active. - BREAKING CHANGE: Creating transactions from a
Connection
or savepoints from aTransaction
now take&mut self
instead of&self
to correctly represent that transactions within a connection are inherently nested. While a transaction is alive, the parent connection or transaction is unusable, soTransaction
now implementsDeref<Target=Connection>
, giving access toConnection
's methods via theTransaction
itself. - BREAKING CHANGE:
Transaction::set_commit
andTransaction::set_rollback
have been replaced byTransaction::set_drop_behavior
. - Adds
Connection::prepare_cached
.Connection
now keeps an internal cache of any statements prepared via this method. The size of this cache defaults to 16 (prepare_cached
will always work but may re-prepare statements if more are prepared than the cache holds), and can be controlled viaConnection::set_prepared_statement_cache_capacity
. - Adds
query_map_named
andquery_and_then_named
toStatement
. - Adds
insert
convenience method toStatement
which returns the row ID of an inserted row. - Adds
exists
convenience method returning whether a query finds one or more rows. - Adds support for serializing types from the
serde_json
crate. Requires theserde_json
feature. - Adds support for serializing types from the
chrono
crate. Requires thechrono
feature. - Removes
load_extension
feature fromlibsqlite3-sys
.load_extension
is still available on rusqlite itself. - Fixes crash on nightly Rust when using the
trace
feature. - Adds optional
clippy
feature and addresses issues it found. - Adds
column_count()
method toStatement
andRow
. - Adds
types::Value
for dynamic column types. - Adds support for user-defined aggregate functions (behind the existing
functions
Cargo feature). - Introduces a
RowIndex
trait allowing columns to be fetched via index (as before) or name (new). - Introduces
ZeroBlob
type under theblob
module/feature exposing SQLite's zeroblob API. - Adds CI testing for Windows via AppVeyor.
- Fixes a warning building libsqlite3-sys under Rust 1.6.
- Adds an unsafe
handle()
method toConnection
. Please file an issue if you actually use it.
- BREAKING CHANGE:
SqliteError
is now an enum instead of a struct. Previously, we were (ab)using the error code and message to send back both underlying SQLite errors and errors that occurred at the Rust level. Now those have been separated out; SQLite errors are returned asSqliteFailure
cases (which still include the error code but also include a Rust-friendlier enum as well), and rusqlite-level errors are captured in other cases. Because of this change,SqliteError
no longer implementsPartialEq
. - BREAKING CHANGE: When opening a new detection, rusqlite now detects if SQLite was compiled or configured for single-threaded use only; if it was, connection attempts will fail. If this affects you, please open an issue.
- BREAKING CHANGE:
SqliteTransactionDeferred
,SqliteTransactionImmediate
, andSqliteTransactionExclusive
are no longer exported. Instead, useTransactionBehavior::Deferred
,TransactionBehavior::Immediate
, andTransactionBehavior::Exclusive
. - Removed
Sqlite
prefix on many types:SqliteConnection
is nowConnection
SqliteError
is nowError
SqliteResult
is nowResult
SqliteStatement
is nowStatement
SqliteRows
is nowRows
SqliteRow
is nowRow
SqliteOpenFlags
is nowOpenFlags
SqliteTransaction
is nowTransaction
.SqliteTransactionBehavior
is nowTransactionBehavior
.SqliteLoadExtensionGuard
is nowLoadExtensionGuard
. The old, prefixed names are still exported but are deprecated.
- Adds a variety of
..._named
methods for executing queries using named placeholder parameters. - Adds
backup
feature that exposes SQLite's online backup API. - Adds
blob
feature that exposes SQLite's Incremental I/O for BLOB API. - Adds
functions
feature that allows user-defined scalar functions to be added to openSqliteConnection
s.
- Adds
trace
feature that allows the use of SQLite's logging, tracing, and profiling hooks. - Slight change to the closure types passed to
query_map
andquery_and_then
:- Remove the
'static
requirement on the closure's output type. - Give the closure a
&SqliteRow
instead of aSqliteRow
.
- Remove the
- When building, the environment variable
SQLITE3_LIB_DIR
now takes precedence over pkg-config. - If
pkg-config
is not available, we will try to findlibsqlite3
in/usr/lib
. - Add more documentation for failure modes of functions that return
SqliteResult
s. - Updates
libc
dependency to 0.2, fixing builds on ARM for Rust 1.6 or newer.
- Adds
Sized
bound toFromSql
trait as required by RFC 1214.
- Reset underlying SQLite statements as soon as possible after executing, as recommended by http://www.sqlite.org/cvstrac/wiki?p=ScrollingCursor.
- Removes
get_opt
. Useget_checked
instead. - Add
query_row_and_then
andquery_and_then
convenience functions. These are analogous toquery_row
andquery_map
but allow functions that can fail by returningResult
s. - Relax uses of
P: AsRef<...>
from&P
toP
. - Add additional error check for calling
execute
whenquery
was intended. - Improve debug formatting of
SqliteStatement
andSqliteConnection
. - Changes documentation of
get_checked
to correctly indicate that it returns errors (not panics) when given invalid types or column indices.
- Add
column_names()
toSqliteStatement
. - By default, include
SQLITE_OPEN_NO_MUTEX
andSQLITE_OPEN_URI
flags when opening a new connection. - Fix generated bindings (e.g.,
sqlite3_exec
was wrong). - Use now-generated
sqlite3_destructor_type
to defineSQLITE_STATIC
andSQLITE_TRANSIENT
.
- [breaking-change] Modify
query_row
to return aResult
instead of unwrapping. - Deprecate
query_row_safe
(usequery_row
instead). - Add
query_map
. - Add
get_checked
, which asks SQLite to do some basic type-checking of columns.
- Publish version that builds on stable rust (beta). This version lives on the
stable
branch. Development continues onmaster
and still requires a nightly version of Rust.
- Updates to track rustc nightly.
- Make SqliteConnection
Send
.
- Remove unneeded features (also involves switching to
libc
crate).
- Updates to track rustc nightly.
- Updates to track rustc stabilization.
- Reexport
sqlite3_stmt
fromlibsqlite3-sys
for easierimpl
-ing ofToSql
andFromSql
. - Updates to track latest rustc changes.
- Update dependency versions.
- BREAKING CHANGE:
open
now expects aPath
rather than astr
. There is a separateopen_in_memory
constructor for opening in-memory databases. - Added the ability to load SQLite extensions. This is behind the
load_extension
Cargo feature, because not all builds of sqlite3 include this ability. Notably the default libsqlite3 that ships with OS X 10.10 does not support extensions.
- Updates to track latest rustc changes.
- Implement standard
Error
trait forSqliteError
.
- Updates to track latest rustc changes.
- Use external bitflags from crates.io.
- Updates to track latest rustc changes (1.0.0-alpha).
- Add
query_row_safe
, aSqliteResult
-returning variant ofquery_row
.
- Updates to track latest rustc changes (closure syntax).
- Updates to track latest rust stdlib changes (
std::c_str
->std::ffi
).
- Updates to track latest rustc changes.
- Updates to track latest rustc changes.
- Add call to
sqlite3_busy_timeout
.
- Remove use of now-deprecated
std::vec::raw::from_buf
. - Update to latest version of
time
crate.
- Initial release