Small. Fast. Reliable.
Choose any three.

## SQLite Release 3.7.16.2 On 2013-04-12

1. Added the PRAGMA foreign_key_check command.
2. Added new extended error codes for all SQLITE_CONSTRAINT errors
3. Added the SQLITE_READONLY_ROLLBACK extended error code for when a database cannot be opened because it needs rollback recovery but is read-only.
4. Added SQL functions unicode(A) and char(X1,...,XN).
5. Performance improvements for PRAGMA incremental_vacuum, especially in cases where the number of free pages is greater than what will fit on a single trunk page of the freelist.
6. Improved optimization of queries containing aggregate min() or max().
7. Enhance virtual tables so that they can potentially use an index when the WHERE clause contains the IN operator.
8. Allow indices to be used for sorting even if prior terms of the index are constrained by IN operators in the WHERE clause.
9. Enhance the PRAGMA table_info command so that the "pk" column is an increasing integer to show the order of columns in the primary key.
10. Enhance the query optimizer to exploit transitive join constraints.
11. Performance improvements in the query optimizer.
12. Allow the error message from PRAGMA integrity_check to be longer than 20000 bytes.
13. Improved name resolution for deeply nested queries.
14. Added the test_regexp.c module as a demonstration of how to implement the REGEXP operator.
15. Improved error messages in the RTREE extension.
16. Enhance the command-line shell so that a non-zero argument to the ".exit" command causes the shell to exit immediately without cleanly shutting down the database connection.
17. Improved error messages for invalid boolean arguments to dot-commands in the command-line shell.
18. Improved error messages for "foreign key mismatch" showing the names of the two tables involved.
19. Remove all uses of umask() in the unix VFS.
20. Added the PRAGMA vdbe_addoptrace and PRAGMA vdbe_debug commands.
21. Change to use strncmp() or the equivalent instead of memcmp() when comparing non-zero-terminated strings.
22. Update cygwin interfaces to omit deprecated API calls.
23. Enhance the spellfix1 extension so that the edit distance cost table can be changed at runtime by inserting a string like 'edit_cost_table=TABLE' into the "command" field.
24. Bug fix: repair a long-standing problem that could cause incorrect query results in a 3-way or larger join that compared INTEGER fields against TEXT fields in two or more places. Ticket fc7bd6358f
25. Bug fix: Issue an error message if the 16-bit reference counter on a view overflows due to an overly complex query.
26. Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply nested UNION ALL queries.
27. Bug fix: Make sure the schema is up-to-date prior to running pragmas table_info, index_list, index_info, and foreign_key_list.

1. Fix for a bug in the ORDER BY optimizer that was introduced in version 3.7.15 which would sometimes optimize out the sorting step when in fact the sort was required. Ticket a179fe7465
2. Fix a long-standing bug in the CAST expression that would recognize UTF16 characters as digits even if their most-significant-byte was not zero. Ticket 689137afb6da41.
3. Fix a bug in the NEAR operator of FTS3 when applied to subfields. Ticket 38b1ae018f.
4. Fix a long-standing bug in the storage engine that would (very rarely) cause a spurious report of an SQLITE_CORRUPT error but which was otherwise harmless. Ticket 6bfb98dfc0c.
5. The SQLITE_OMIT_MERGE_SORT option has been removed. The merge sorter is now a required component of SQLite.
6. Fixed lots of spelling errors in the source-code comments

1. Fix a bug (present since version 3.7.13) that could result in database corruption on windows if two or more processes try to access the same database file at the same time and immediately after third process crashed in the middle of committing to that same file. See ticket 7ff3120e4f for further information.
2. SQLITE_SOURCE_ID: "2013-04-12 11:52:43 cbea02d93865ce0e06789db95fd9168ebac970c7"
3. SHA1 for sqlite3.c: d466b54789dff4fb0238b9232e74896deaefab94

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.