rusqlite 0.20.0

Ergonomic wrapper for SQLite
Documentation
For version 0.15.0 and above, see [Releases](https://github.com/jgallagher/rusqlite/releases) page.

# Version 0.14.0 (2018-08-17)

* BREAKING CHANGE: `ToSql` implementation for `time::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 for `fn`.
* 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` and `sqlite3_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` in `Transaction`.
* Fix `tyvar_behind_raw_pointer` warnings.
* Fix handful of clippy warnings.
* Fix `Connection::open` documentation (#332)
* Add binding to `sqlite3_get_autocommit` and `sqlite3_stmt_busy`.
* Add binding to `sqlite3_busy_timeout` and `sqlite3_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.

# Version 0.13.0 (2017-11-13)

* Added ToSqlConversionFailure case to Error enum.
* Now depends on chrono 0.4, bitflats 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.

# Version 0.12.0 (2017-05-29)

* 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 for `str` and `[u8]`.

# Version 0.11.0 (2017-04-06)

* Avoid publicly exporting SQLite constants multiple times from libsqlite3-sys.
* Adds `FromSql` and `ToSql` impls for `isize`. Documents why `usize` and `u64` are not included.

# Version 0.10.1 (2017-03-03)

* 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.

# Version 0.10.0 (2017-02-28)

* Re-export the `ErrorCode` enum from `libsqlite3-sys`.
* Adds `version()` and `version_number()` functions for querying the version of SQLite in use.
* Adds the `limits` feature, exposing `limit()` and `set_limit()` methods on `Connection`.
* Updates to `libsqlite3-sys` 0.7.0, which runs rust-bindgen at build-time instead of assuming the
  precense 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 by
  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 by
  skipped by calling the unsafe function `rusqlite::bypass_sqlite_version_check()`.
* Removes the `libc` dependency in favor of using `std::os::raw`

# Version 0.9.5 (2017-01-26)

* Add impls of `Clone`, `Debug`, and `PartialEq` to `ToSqlOutput`.

# Version 0.9.4 (2017-01-25)

* Update dependencies.

# Version 0.9.3 (2017-01-23)

* Make `ToSqlOutput` itself implement `ToSql`.

# Version 0.9.2 (2017-01-22)

* Bugfix: The `FromSql` impl for `i32` now returns an error instead of
  truncating if the underlying SQLite value is out of `i32`'s range.
* Added `FromSql` and `ToSql` impls for `i8`, `i16`, `u8`, `u16`, and `u32`.
  `i32` and `i64` already had impls. `u64` is omitted because their range
  cannot be represented by `i64`, which is the type we use to communicate with
  SQLite.

# Version 0.9.1 (2017-01-20)

* BREAKING CHANGE: `Connection::close()` now returns a `Result<(), (Connection, Error)>` instead
  of a `Result<(), Error>` so callers get the still-open connection back on failure.

# Version 0.8.0 (2016-12-31)

* 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 without
  `unsafe`, 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`,
  and `query_row_named` now expects a `&Row` instead of a `Row`. 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 to `Statement`.
* 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.

# Version 0.7.3 (2016-06-01)

* Fixes an incorrect failure from the `insert()` convenience function when back-to-back inserts to
  different tables both returned the same row ID
  ([#171]https://github.com/jgallagher/rusqlite/issues/171).

# Version 0.7.2 (2016-05-19)

* BREAKING CHANGE: `Rows` no longer implements `Iterator`. It still has a `next()` method, but
  the lifetime of the returned `Row` is now tied to the lifetime of the vending `Rows` 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 of `query_map` and `query_and_then` over raw `query`; both of theose still return handles
  that implement `Iterator`.
* BREAKING CHANGE: `Transaction::savepoint()` now returns a `Savepoint` instead of another
  `Transaction`. Unlike `Transaction`, `Savepoint`s can be rolled back while keeping the current
  savepoint active.
* BREAKING CHANGE: Creating transactions from a `Connection` or savepoints from a `Transaction`
  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, so `Transaction` now implements `Deref<Target=Connection>`, giving
  access to `Connection`'s methods via the `Transaction` itself.
* BREAKING CHANGE: `Transaction::set_commit` and `Transaction::set_rollback` have been replaced
  by `Transaction::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 via `Connection::set_prepared_statement_cache_capacity`.
* Adds `query_map_named` and `query_and_then_named` to `Statement`.
* Adds `insert` convenience method to `Statement` 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 the `serde_json` feature.
* Adds support for serializing types from the `chrono` crate. Requires the `chrono` feature.
* Removes `load_extension` feature from `libsqlite3-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 to `Statement` and `Row`.
* 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 the `blob` 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 to `Connection`. Please file an issue if you actually use it.

# Version 0.6.0 (2015-12-17)

* 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 as 
  `SqliteFailure` 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 implements `PartialEq`.
* 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`, and
  `SqliteTransactionExclusive` are no longer exported. Instead, use
  `TransactionBehavior::Deferred`, `TransactionBehavior::Immediate`, and
  `TransactionBehavior::Exclusive`.
* Removed `Sqlite` prefix on many types:
    * `SqliteConnection` is now `Connection`
    * `SqliteError` is now `Error`
    * `SqliteResult` is now `Result`
    * `SqliteStatement` is now `Statement`
    * `SqliteRows` is now `Rows`
    * `SqliteRow` is now `Row`
    * `SqliteOpenFlags` is now `OpenFlags`
    * `SqliteTransaction` is now `Transaction`.
    * `SqliteTransactionBehavior` is now `TransactionBehavior`.
    * `SqliteLoadExtensionGuard` is now `LoadExtensionGuard`.
  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
  open `SqliteConnection`s.

# Version 0.5.0 (2015-12-08)

* 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` and `query_and_then`:
    * Remove the `'static` requirement on the closure's output type.
    * Give the closure a `&SqliteRow` instead of a `SqliteRow`.
* When building, the environment variable `SQLITE3_LIB_DIR` now takes precedence over pkg-config.
* If `pkg-config` is not available, we will try to find `libsqlite3` 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.

# Version 0.4.0 (2015-11-03)

* Adds `Sized` bound to `FromSql` trait as required by RFC 1214.

# Version 0.3.1 (2015-09-22)

* Reset underlying SQLite statements as soon as possible after executing, as recommended by
  http://www.sqlite.org/cvstrac/wiki?p=ScrollingCursor.

# Version 0.3.0 (2015-09-21)

* Removes `get_opt`. Use `get_checked` instead.
* Add `query_row_and_then` and `query_and_then` convenience functions. These are analogous to
  `query_row` and `query_map` but allow functions that can fail by returning `Result`s.
* Relax uses of `P: AsRef<...>` from `&P` to `P`.
* Add additional error check for calling `execute` when `query` was intended.
* Improve debug formatting of `SqliteStatement` and `SqliteConnection`.
* Changes documentation of `get_checked` to correctly indicate that it returns errors (not panics)
  when given invalid types or column indices.

# Version 0.2.0 (2015-07-26)

* Add `column_names()` to `SqliteStatement`.
* By default, include `SQLITE_OPEN_NO_MUTEX` and `SQLITE_OPEN_URI` flags when opening a
  new conneciton.
* Fix generated bindings (e.g., `sqlite3_exec` was wrong).
* Use now-generated `sqlite3_destructor_type` to define `SQLITE_STATIC` and `SQLITE_TRANSIENT`.

# Version 0.1.0 (2015-05-11)

* [breaking-change] Modify `query_row` to return a `Result` instead of unwrapping.
* Deprecate `query_row_safe` (use `query_row` instead).
* Add `query_map`.
* Add `get_checked`, which asks SQLite to do some basic type-checking of columns.

# Version 0.0.17 (2015-04-03)

* Publish version that builds on stable rust (beta). This version lives on the
  `stable` branch. Development continues on `master` and still requires a nightly
  version of Rust.

# Version 0.0.16

* Updates to track rustc nightly.

# Version 0.0.15

* Make SqliteConnection `Send`.

# Version 0.0.14

* Remove unneeded features (also involves switching to `libc` crate).

# Version 0.0.13 (2015-03-26)

* Updates to track rustc nightly.

# Version 0.0.12 (2015-03-24)

* Updates to track rustc stabilization.

# Version 0.0.11 (2015-03-12)

* Reexport `sqlite3_stmt` from `libsqlite3-sys` for easier `impl`-ing of `ToSql` and `FromSql`.
* Updates to track latest rustc changes.
* Update dependency versions.

# Version 0.0.10 (2015-02-23)

* BREAKING CHANGE: `open` now expects a `Path` rather than a `str`. There is a separate
  `open_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.

# Version 0.0.9 (2015-02-13)

* Updates to track latest rustc changes.
* Implement standard `Error` trait for `SqliteError`.

# Version 0.0.8 (2015-02-04)

* Updates to track latest rustc changes.

# Version 0.0.7 (2015-01-20)

* Use external bitflags from crates.io.

# Version 0.0.6 (2015-01-10)

* Updates to track latest rustc changes (1.0.0-alpha).
* Add `query_row_safe`, a `SqliteResult`-returning variant of `query_row`.

# Version 0.0.5 (2015-01-07)

* Updates to track latest rustc changes (closure syntax).
* Updates to track latest rust stdlib changes (`std::c_str` -> `std::ffi`).

# Version 0.0.4 (2015-01-05)

* Updates to track latest rustc changes.

# Version 0.0.3 (2014-12-23)

* Updates to track latest rustc changes.
* Add call to `sqlite3_busy_timeout`.

# Version 0.0.2 (2014-12-04)

* Remove use of now-deprecated `std::vec::raw::from_buf`.
* Update to latest version of `time` crate.

# Version 0.0.1 (2014-11-21)

* Initial release