Small. Fast. Reliable.
Choose any three.

## SQLite Release 3.9.3 On 2016-04-01

Prior changes from version 3.9.0 (2015-10-14):

Policy Changes:

1. The version numbering conventions for SQLite are revised to use the emerging standard of semantic versioning.

   New Features And Enhancements:

2. Added the json1 extension module in the source tree, and in the amalgamation. Enable support using the SQLITE_ENABLE_JSON1 compile-time option.
3. Added Full Text Search version 5 (FTS5) to the amalgamation, enabled using SQLITE_ENABLE_FTS5. FTS5 will be considered "experimental" (subject to incompatible changes) for at least one more release cycle.
4. The CREATE VIEW statement now accepts an optional list of column names following the view name.
5. Added support for indexes on expressions.
6. Added support for table-valued functions in the FROM clause of a SELECT statement.
7. Added support for eponymous virtual tables.
8. A VIEW may now reference undefined tables and functions when initially created. Missing tables and functions are reported when the VIEW is used in a query.
9. Added the sqlite3_value_subtype() and sqlite3_result_subtype() interfaced (used by the json1 extension).
10. The query planner is now able to use partial indexes that contain AND-connected terms in the WHERE clause.
11. The sqlite3_analyzer.exe utility is updated to report the depth of each btree and to show the average fanout for indexes and WITHOUT ROWID tables.
12. Enhanced the dbstat virtual table so that it can be used as a table-valued function where the argument is the schema to be analyzed.

    Other changes:

13. The sqlite3_memory_alarm() interface, which has been deprecated and undocumented for 8 years, is changed into a no-op.

    Important fixes:

14. Fixed a critical bug in the SQLite Encryption Extension that could cause the database to become unreadable and unrecoverable if a VACUUM command changed the size of the encryption nonce.
15. Added a memory barrier in the implementation of sqlite3_initialize() to help ensure that it is thread-safe.
16. Fix the OR optimization so that it always ignores subplans that do not use an index.
17. Do not apply the WHERE-clause pushdown optimization on terms that originate in the ON or USING clause of a LEFT JOIN. Fix for ticket c2a19d81652f40568c.

Prior changes from version 3.9.1 (2015-10-16):

1. Fix the json1 extension so that it does not recognize ASCII form-feed as a whitespace character, in order to comply with RFC-7159. Fix for ticket 57eec374ae1d0a1d
2. Add a few #ifdef and build script changes to address compilation issues that appeared after the 3.9.0 release.

Prior changes from version 3.9.2 (2015-11-02):

1. Fix the schema parser so that it interprets certain (obscure and ill-formed) CREATE TABLE statements the same as legacy. Fix for ticket ac661962a2aeab3c331
2. Fix a query planner problem that could result in an incorrect answer due to the use of automatic indexing in subqueries in the FROM clause of a correlated scalar subqueries. Fix for ticket 8a2adec1.

Changes in this specific patch release, version 3.9.3 (2016-04-01):

1. Backport a simple query planner optimization that allows the IS operator to drive an index on a LEFT OUTER JOIN. No other changes from the version 3.9.2 baseline.

A complete list of SQLite releases in a single page and a chronology are both also available. A detailed history of every check-in is available at SQLite version control site.