Small. Fast. Reliable.
Choose any three.
SQLite Release 3.8.8.1 On 2015-01-20
- Fix a bug in the sorting logic, present since version 3.8.4, that can cause
output to appear in the wrong order on queries that contains an ORDER BY clause,
a LIMIT clause, and that have approximately 60 or more columns in the result set.
Ticket f97c4637102a3ae72b79.
- SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
- SHA1 for sqlite3.c: 33987fb50dcc09f1429a653d6b47672f5a96f19e
Changes carried forward from version 3.8.8 (2015-01-16):
New Features:
- Added the PRAGMA data_version command that can be used to determine if
a database file has been modified by another process.
- Added the SQLITE_CHECKPOINT_TRUNCATE option to the
sqlite3_wal_checkpoint_v2() interface, with corresponding enhancements
to PRAGMA wal_checkpoint.
- Added the sqlite3_stmt_scanstatus() interface, available only when
compiled with SQLITE_ENABLE_STMT_SCANSTATUS.
- The sqlite3_table_column_metadata() is enhanced to work correctly on
WITHOUT ROWID tables and to check for the existence of a
a table if the column name parameter is NULL. The interface is now
also included in the build by default, without requiring
the SQLITE_ENABLE_COLUMN_METADATA compile-time option.
- Added the SQLITE_ENABLE_API_ARMOR compile-time option.
- Added the SQLITE_REVERSE_UNORDERED_SELECTS compile-time option.
- Added the SQLITE_SORTER_PMASZ compile-time option and SQLITE_CONFIG_PMASZ
start-time option.
- Added the SQLITE_CONFIG_PCACHE_HDRSZ option to sqlite3_config()
which makes it easier for applications to determine the appropriate
amount of memory for use with SQLITE_CONFIG_PAGECACHE.
- The number of rows in a VALUES clause is no longer limited by
SQLITE_LIMIT_COMPOUND_SELECT.
- Added the eval.c
loadable extension that implements an eval() SQL function that will recursively
evaluate SQL.
Performance Enhancements:
- Reduce the number of memcpy() operations involved in balancing a b-tree,
for 3.2% overall performance boost.
- Improvements to cost estimates for the skip-scan optimization.
- The automatic indexing optimization is now capable of generating
a partial index if that is appropriate.
Bug fixes:
- Ensure durability following a power loss with
"PRAGMA journal_mode=TRUNCATE" by calling fsync() right after truncating
the journal file.
- The query planner now recognizes that any column in the right-hand
table of a LEFT JOIN can be NULL, even if that column has a NOT NULL
constraint. Avoid trying to optimize out NULL tests in those cases.
Fix for ticket
6f2222d550f5b0ee7ed.
- Make sure ORDER BY puts rows in ascending order even if the DISTINCT
operator is implemented using a descending index. Fix for ticket
c5ea805691bfc4204b1cb9e.
- Fix data races that might occur under stress when running with many threads
in shared cache mode where some of the threads are opening and
closing connections.
- Fix obscure crash bugs found by
american fuzzy lop. Ticket
a59ae93ee990a55.
- Work around a GCC optimizer bug (for gcc 4.2.1 on MacOS 10.7) that caused the
R-Tree extension to compute incorrect results when compiled with -O3.
Other changes:
- Disable the use of the strchrnul() C-library routine unless it is
specifically enabled using the -DHAVE_STRCHRNULL compile-time option.
- Improvements to the effectiveness and accuracy of the
likelihood(), likely(), and unlikely() SQL hint functions.
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.