SQLite Release 3.23.0 On 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() extension function.
- 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 maximum.
- Bug fixes:
- Fix the parser to accept valid row value syntax. Ticket 7310e2fb3d046a5
- Fix the query planner so that it takes into account dependencies in the arguments to table-valued functions in subexpressions in the WHERE clause. Ticket 80177f0c226ff54
- Fix incorrect result with complex OR-connected WHERE and STAT4. Ticket ec32177c99ccac2
- Fix potential corruption in indexes on expressions due to automatic datatype conversions. Ticket 343634942dd54ab
- Assertion fault in FTS4. Ticket d6ec09eccf68cfc
- Incorrect result on the less-than operator in row values. Ticket f484b65f3d62305
- Always interpret non-zero floating-point values as TRUE, even if the integer part is zero. Ticket 36fae083b450e3a
- Fix an issue in the fsdir(PATH) table-valued function to the fileio.c extension, 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 7ce4e71c1b7251be
- 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 525deb7a67fbd647
- Fix the ANALYZE command so that it computes statistics on tables whose names begin with "sqlite". Check-in 0249d9aecf69948d
- Additional fixes for issues detected by OSSFuzz:
- Fix a possible infinite loop on VACUUM for corrupt database files. Check-in 27754b74ddf64
- Disallow parameters in the WITH clause of triggers and views. Check-in b918d4b4e546d
- Fix a potential memory leak in row value processing. Check-in 2df6bbf1b8ca8
- 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. Check-in fab2c2b07b5d3
- 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 d75e67654aa96
- Incorrect assert() statement removed. Check-in 823779d31eb09cda.
- Fix a problem with using the LIKE optimization on an INTEGER PRIMARY KEY. Check-in b850dd159918af56.
Hashes:
- SQLITE_SOURCE_ID: "2018-04-02 11:04:16 736b53f57f70b23172c30880186dce7ad9baa3b74e3838cae5847cffb98f5cd2"
- SHA3-256 for sqlite3.c: 4bed3dc2dc905ff55e2c21fd2725551fc0ca50912a9c96c6af712a4289cb24fa