Small. Fast. Reliable.
Choose any three.
SQLite Release 3.23.1 On 2018-04-10
Prior changes from version 3.23.0 (2018-04-02):
- Add the sqlite3_serialize() and sqlite3_deserialize() interfaces when
the SQLITE_ENABLE_DESERIALIZE compile-time option is used.
- Recognize TRUE and FALSE as constants. (For compatibility, if there
exist columns named "true" or "false", then the identifiers refer to the
columns rather than Boolean constants.)
- Support operators IS TRUE, IS FALSE, IS NOT TRUE, and IS NOT FALSE.
- Added the SQLITE_DBSTATUS_CACHE_SPILL option to sqlite3_db_status() for
reporting the number of cache spills that have occurred.
- The "alternate-form-2" flag ("!") on the built-in printf implementation
now causes string substitutions to measure the width and precision in
characters instead of bytes.
- If the xColumn method in a virtual table implementation returns
an error message using sqlite3_result_error() then give that error
message preference over internally-generated messages.
- Added the -A command-line option to the CLI to make it easier to manage
SQLite Archive files.
- Add support for INSERT OR REPLACE, INSERT OR IGNORE, and UPDATE OR REPLACE
in the Zipfile virtual table.
- Enhance the sqlite3changeset_apply() interface so that it is hardened
against attacks from deliberately corrupted changeset objects.
- Added the sqlite3_normalize()
- Query optimizer enhancements:
- Improve the omit-left-join optimization so that it works in cases where
the right-hand table is UNIQUE but not necessarily NOT NULL.
- Improve the push-down optimization so that it works for many LEFT JOINs.
- Add the LEFT JOIN strength reduction optimization that converts a LEFT
JOIN into an ordinary JOIN if there exist terms in the WHERE clause
that would prevent the extra all-NULL row of the LEFT JOIN from
appearing in the output set.
- Avoid unnecessary writes to the sqlite_sequence table when an
AUTOINCREMENT table is updated with an rowid that is less than the
- Bug fixes:
- Fix the parser to accept valid row value syntax.
- Fix the query planner so that it takes into account dependencies in
the arguments to table-valued functions in subexpressions in
the WHERE clause.
- Fix incorrect result with complex OR-connected WHERE and STAT4.
- Fix potential corruption in indexes on expressions due to automatic
- Assertion fault in FTS4.
- Incorrect result on the less-than operator in row values.
- Always interpret non-zero floating-point values as TRUE, even if
the integer part is zero.
- Fix an issue in the fsdir(PATH) table-valued function to the
that caused a segfault if the fsdir() table was used as the inner table
of a join. Problem reported on the mailing list and fixed by check-in
- Issue an error rather instead of an assertion-fault or null-pointer
dereference when the sqlite_master table is corrupted so that the
sqlite_sequence table root page is really a btree-index page. Check-in
- Fix the ANALYZE command so that it computes statistics on tables
whose names begin with "sqlite". Check-in
- Additional fixes for issues detected by
- Fix a possible infinite loop on VACUUM for corrupt database files.
- Disallow parameters in the WITH clause of triggers and views.
- Fix a potential memory leak in row value processing.
- Improve the performance of the replace() SQL function for cases where
there are many substitutions on megabyte-sized strings, in an attempt
to avoid OSSFuzz timeouts during testing.
- Provide an appropriate error message when the sqlite_master table
contains a CREATE TABLE AS statement. Formerly this caused either an
assertion fault or null pointer dereference. Problem found by OSSFuzz
on the GDAL project. Check-in
- Incorrect assert() statement removed. Check-in
- Fix a problem with using the LIKE optimization on an
INTEGER PRIMARY KEY. Check-in
Changes in this specific patch release, version 3.23.1 (2018-04-10):
- Fix two problems in the new LEFT JOIN strength reduction optimization.
- Fix misbehavior of the FTS5 xBestIndex method. Ticket
- Fix a harmless reference to an uninitialized virtual machine register.
- Fix the CLI so that it builds with -DSQLITE_UNTESTABLE
- Fix the eval.c extension
so that it works with PRAGMA empty_result_callbacks=ON.
- Fix the generate_series virtual table so that it correctly returns
no rows if any of its constraints are NULL.
- Performance enhancements in the parser.
- SQLITE_SOURCE_ID: "2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b"
- SHA3-256 for sqlite3.c: 65750d1e506f416a0b0b9dd22d171379679c733e3460549754dc68c92705b5dc
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.