Small. Fast. Reliable.
Choose any three.

## SQLite Release 3.45.2 On 2024-03-12

Prior changes from version 3.45.0 (2024-01-15):

1. Added the SQLITE_RESULT_SUBTYPE property for application-defined SQL functions. All application defined SQL functions that invokes sqlite3_result_subtype() must be registered with this new property. Failure to do so might cause the call to sqlite3_result_subtype() to behave as a no-op. Compile with -DSQLITE_STRICT_SUBTYPE=1 to cause an SQL error to be raised if a function that is not SQLITE_RESULT_SUBTYPE tries invokes sqlite3_result_subtype(). The use of -DSQLITE_STRICT_SUBTYPE=1 is a recommended compile-time option for every application that makes use of subtypes.
2. Enhancements to the JSON SQL functions:
   1. All JSON functions are rewritten to use a new internal parse tree format called JSONB. The new parse-tree format is serializable and hence can be stored in the database to avoid unnecessary re-parsing whenever the JSON value is used.
   2. New versions of JSON-generating functions generate binary JSONB instead of JSON text.
   3. The json_valid() function adds an optional second argument that specifies what it means for the first argument to be "well-formed".
3. Add the FTS5 tokendata option to the FTS5 virtual table.
4. The SQLITE_DIRECT_OVERFLOW_READ optimization is now enabled by default. Disable it at compile-time using -DSQLITE_DIRECT_OVERFLOW_READ=0.
5. Query planner improvements:
   1. Do not allow the transitive constraint optimization to trick the query planner into using a range constraint when a better equality constraint is available. (Forum post 2568d1f6e6.)
   2. The query planner now does a better job of disregarding indexes that ANALYZE identifies as low-quality. (Forum post 6f0958b03b.)
6. Increase the default value for SQLITE_MAX_PAGE_COUNT from 1073741824 to 4294967294.
7. Enhancements to the CLI:
   1. Improvements to the display of UTF-8 content on Windows
   2. Automatically detect playback of ".dump" scripts and make appropriate changes to settings such as ".dbconfig defensive off" and ".dbconfig dqs_dll on".

Prior changes from version 3.45.1 (2024-01-30):

1. Restore the JSON BLOB input bug, and promise to support the anomaly in subsequent releases, for backward compatibility.
2. Fix the PRAGMA integrity_check command so that it works on read-only databases that contain FTS3 and FTS5 tables. This resolves an issue introduced in version 3.44.0 but was undiscovered until after the 3.45.0 release.
3. Fix issues associated with processing corrupt JSONB inputs:
   1. Prevent exponential runtime when converting a corrupt JSONB into text.
   2. Fix a possible read of one byte past the end of the JSONB blob when converting a corrupt JSONB into text.
   3. Enhanced testing using jfuzz to prevent any future JSONB problems such as the above.
4. Fix a long-standing bug in which a read of a few bytes past the end of a memory-mapped segment might occur when accessing a craftily corrupted database using memory-mapped database.
5. Fix a long-standing bug in which a NULL pointer dereference might occur in the bytecode engine due to incorrect bytecode being generated for a class of SQL statements that are deliberately designed to stress the query planner but which are otherwise pointless.

Changes in this specific patch release, version 3.45.2 (2024-03-12):

1. Fix an error in UPSERT, introduced by enhancement 3a in version 3.35.0 (2021-03-12), that could cause an index to get out-of-sync with its table. Forum thread 919c6579c8.
2. Reduce the scope of the NOT NULL strength reduction optimization that was added as item 8e in version 3.35.0 (2021-03-12). The optimization was being attempted in some contexts where it did not work, resulting in incorrect query results. Forum thread 440f2a2f17.
3. Other trifling corrections and compiler warning fixes that have come up since the previous patch release. See the timeline for details.

   Hashes:

4. SQLITE_SOURCE_ID: "2024-03-12 11:06:23 d8cd6d49b46a395b13955387d05e9e1a2a47e54fb99f3c9b59835bbefad6af77"
5. SHA3-256 for sqlite3.c: bd76ad2dc9cde151e469e86627a7e8753aa8ef1a6f657c5a80ba48324b53226b

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.