Small. Fast. Reliable.
Choose any three.

## SQLite Release 3.19.3 On 2017-06-08

1. Fix a bug associated with auto_vacuum that can lead to database corruption. The bug was introduced in version 3.16.0 (2017-01-02). Ticket fda22108.

   Hashes:

2. SQLITE_SOURCE_ID: "2017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b"
3. SHA3-256 for sqlite3.c: 368f1d31272b1739f804bcfa5485e5de62678015c4adbe575003ded85c164bb8

Changes carried forward from version 3.19.2 (2017-05-25):

1. Fix more bugs in the LEFT JOIN flattening optimization. Ticket 7fde638e94287d2c.

Changes carried forward from version 3.19.1 (2017-05-24):

1. Fix a bug in the LEFT JOIN flattening optimization. Ticket cad1ab4cb7b0fc.
2. Remove a surplus semicolon that was causing problems for older versions of MSVC.

Changes carried forward from version 3.19.0 (2017-05-22):

1. The SQLITE_READ authorizer callback is invoked once with a column name that is an empty string for every table referenced in a query from which no columns are extracted.
2. When using an index on an expression, try to use expression values already available in the index, rather than loading the original columns and recomputing the expression.
3. Enhance the flattening optimization so that it is able to flatten views on the right-hand side of a LEFT JOIN.
4. Use replace() instead of char() for escaping newline and carriage-return characters embedded in strings in the .dump output from the command-line shell.
5. Avoid unnecessary foreign key processing in UPDATE statements that do not touch the columns that are constrained by the foreign keys.
6. On a DISTINCT query that uses an index, try to skip ahead to the next distinct entry using the index rather than stepping through rows, when an appropriate index is available.
7. Avoid unnecessary invalidation of sqlite3_blob handles when making changes to unrelated tables.
8. Transfer any terms of the HAVING clause that use only columns mentioned in the GROUP BY clause over to the WHERE clause for faster processing.
9. Reuse the same materialization of a VIEW if that VIEW appears more than once in the same query.
10. Enhance PRAGMA integrity_check so that it identifies tables that have two or more rows with the same rowid.
11. Enhance the FTS5 query syntax so that column filters may be applied to arbitrary expressions.
12. Enhance the json_extract() function to cache and reuse parses of JSON input text.
13. Added the anycollseq.c loadable extension that allows a generic SQLite database connection to read a schema that contains unknown and/or application-specific collating sequences.

    Bug Fixes:

14. Fix a problem in REPLACE that can result in a corrupt database containing two or more rows with the same rowid. Fix for ticket f68dc596c4e6018d.
15. Fix a problem in PRAGMA integrity_check that was causing a subsequent VACUUM to behave suboptimally.
16. Fix the PRAGMA foreign_key_check command so that it works correctly with foreign keys on WITHOUT ROWID tables.
17. Fix a bug in the b-tree logic that can result in incorrect duplicate answers for IN operator queries. Ticket 61fe9745
18. Disallow leading zeros in numeric constants in JSON. Fix for ticket b93be8729a895a528e2.
19. Disallow control characters inside of strings in JSON. Fix for ticket 6c9b5514077fed34551.
20. Limit the depth of recursion for JSON objects and arrays in order to avoid excess stack usage in the recursive descent parser. Fix for ticket 981329adeef51011052.

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.