Small. Fast. Reliable.
Choose any three.

## SQLite Release 3.40.1 On 2022-12-28

Prior changes from version 3.40.0 (2022-11-16):

1. Add support for compiling SQLite to WASM and running it in web browsers. NB: The WASM build and its interfaces are considered "beta" and are subject to minor changes if the need arises. We anticipate finalizing the interface for the next release.
2. Add the recovery extension that might be able to recover some content from a corrupt database file.
3. Query planner enhancements:
   1. Recognize covering indexes on tables with more than 63 columns where columns beyond the 63rd column are used in the query and/or are referenced by the index.
   2. Extract the values of expressions contained within expression indexes where practical, rather than recomputing the expression.
   3. The NOT NULL and IS NULL operators (and their equivalents) avoid loading the content of large strings and BLOB values from disk.
   4. Avoid materializing a view on which a full scan is performed exactly once. Use and discard the rows of the view as they are computed.
   5. Allow flattening of a subquery that is the right-hand operand of a LEFT JOIN in an aggregate query.
4. A new typedef named sqlite3_filename is added and used to represent the name of a database file. Various interfaces are modified to use the new typedef instead of "char*". This interface change should be fully backwards compatible, though it might cause (harmless) compiler warnings when rebuilding some legacy applications.
5. Add the sqlite3_value_encoding() interface.
6. Security enhancement: SQLITE_DBCONFIG_DEFENSIVE is augmented to prohibit changing the schema_version. The schema_version becomes read-only in defensive mode.
7. Enhancements to the PRAGMA integrity_check statement:
   1. Columns in non-STRICT tables with TEXT affinity should not contain numeric values.
   2. Columns in non-STRICT tables with NUMERIC affinity should not contain TEXT values that could be converted into numbers.
   3. Verify that the rows of a WITHOUT ROWID table are in the correct order.
8. Enhance the VACUUM INTO statement so that it honors the PRAGMA synchronous setting.
9. Enhance the sqlite3_strglob() and sqlite3_strlike() APIs so that they are able to accept NULL pointers for their string parameters and still generate a sensible result.
10. Provide the new SQLITE_MAX_ALLOCATION_SIZE compile-time option for limiting the size of memory allocations.
11. Change the algorithm used by SQLite's built-in pseudo-random number generator (PRNG) from RC4 to Chacha20.
12. Allow two or more indexes to have the same name as long as they are all in separate schemas.
13. Miscellaneous performance optimizations result in about 1% fewer CPU cycles used on typical workloads.

Changes in this specific patch release, version 3.40.1 (2022-12-28):

1. Fix the --safe command-line option to the CLI such that it correctly disallows the use of SQL functions like writefile() that can cause harmful side-effects.
2. Fix a potential infinite loop in the memsys5 alternative memory allocator. This bug was introduced by a performance optimization in version 3.39.0.
3. Various other obscure fixes.

   Hashes:

4. SQLITE_SOURCE_ID: 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24
5. SHA3-256 for sqlite3.c: 4d6800e9032ff349376fe612e422b49ba5eb4e378fac0b3e405235d09dd366ab

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.