Small. Fast. Reliable.
Choose any three.

## SQLite Release 3.28.0 On 2019-04-16

1. Enhanced window functions:
   1. Add support the EXCLUDE clause.
   2. Add support for window chaining.
   3. Add support for GROUPS frames.
   4. Add support for "<expr> PRECEDING" and "<expr> FOLLOWING" boundaries in RANGE frames.
2. Added the new sqlite3_stmt_isexplain(S) interface for determining whether or not a prepared statement is an EXPLAIN.
3. Enhanced VACUUM INTO so that it works for read-only databases.
4. New query optimizations:
   1. Enable the LIKE optimization for cases when the ESCAPE keyword is present and PRAGMA case_sensitive_like is on.
   2. In queries that are driven by a partial index, avoid unnecessary tests of the constraint named in the WHERE clause of the partial index, since we know that constraint must always be true.
5. Enhancements to the TCL Interface:
   1. Added the -returntype option to the function method.
   2. Added the new bind_fallback method.
6. Enhancements to the CLI:
   1. Added support for bound parameters and the .parameter command.
   2. Fix the readfile() function so that it returns an empty BLOB rather than throwing an out-of-memory error when reading an empty file.
   3. Fix the writefile() function so that when it creates new directories along the path of a new file, it gives them umask permissions rather than the same permissions as the file.
   4. Change --update option in the .archive command so that it skips files that are already in the archive and are unchanged. Add the new --insert option that works like --update used to work.
7. Added the fossildelta.c extension that can create, apply, and deconstruct the Fossil DVCS file delta format that is used by the RBU extension.
8. Added the SQLITE_DBCONFIG_WRITABLE_SCHEMA verb for the sqlite3_db_config() interface, that does the same work as PRAGMA writable_schema without using the SQL parser.
9. Added the sqlite3_value_frombind() API for determining if the argument to an SQL function is from a bound parameter.
10. Security and compatibilities enhancements to fts3_tokenizer():
    1. The fts3_tokenizer() function always returns NULL unless either the legacy application-defined FTS3 tokenizers interface are enabled using the sqlite3_db_config(SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER) setting, or unless the first argument to fts3_tokenizer() is a bound parameter.
    2. The two-argument version of fts3_tokenizer() accepts a pointer to the tokenizer method object even without the sqlite3_db_config(SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER) setting if the second argument is a bound parameter
11. Improved robustness against corrupt database files.
12. Miscellaneous performance enhancements
13. Established a Git mirror of the offical SQLite source tree. The canonical sources for SQLite are maintained using the Fossil DVCS at https://sqlite.org/src. The Git mirror can be seen at https://github.com/sqlite/sqlite.

    Hashes:

14. SQLITE_SOURCE_ID: 2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50
15. SHA3-256 for sqlite3.c: 411efca996b65448d9798eb203d6ebe9627b7161a646f5d00911e2902a57b2e9

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.