When using memory-mapped I/O map the database file read-only so that stray pointers
+ and/or array overruns in the application cannot accidentally modify the database file.
+
Enhance the 'utc' modifier in the date and time functions so that it is a no-op if
+ the date/time is known to already be in UTC. (This is not a compatibility break since
+ the behavior has long been documented as "undefined" in that case.)
+
Added the ".changes ON|OFF" and ".vfsinfo" dot-commands.
+
Translate between MBCS and UTF8 when
+ running in cmd.exe on Windows.
+
Enhancements to makefiles:
+
Added the --enable-editline and --enable-static-shell options
+ to the various autoconf-generated configure scripts.
+
Omit all use of "awk" in the makefiles, to make building easier for MSVC users.
+
Important fixes:
+
Fix inconsistent integer to floating-point comparison operations that
+ could result in a corrupt index if the index is created on a table
+ column that contains both large integers and floating point values
+ of similar magnitude. Ticket
+ 38a97a87a6.
+
Fix an infinite-loop in the query planner that could occur on
+ malformed common table expressions.
+
When using memory-mapped I/O map the database file read-only so that stray pointers
+ and/or array overruns in the application cannot accidentally modify the database file.
+
Enhance the 'utc' modifier in the date and time functions so that it is a no-op if
+ the date/time is known to already be in UTC. (This is not a compatibility break since
+ the behavior has long been documented as "undefined" in that case.)
+
Added the ".changes ON|OFF" and ".vfsinfo" dot-commands.
+
Translate between MBCS and UTF8 when
+ running in cmd.exe on Windows.
+
Enhancements to makefiles:
+
Added the --enable-editline and --enable-static-shell options
+ to the various autoconf-generated configure scripts.
+
Omit all use of "awk" in the makefiles, to make building easier for MSVC users.
+
Important fixes:
+
Fix inconsistent integer to floating-point comparison operations that
+ could result in a corrupt index if the index is created on a table
+ column that contains both large integers and floating point values
+ of similar magnitude. Ticket
+ 38a97a87a6.
+
Fix an infinite-loop in the query planner that could occur on
+ malformed common table expressions.
+
Fix a 16-month-old bug in the query planner that could generate incorrect results
+ when a scalar subquery attempts to use the block sorting optimization. Ticket
+ cb3aa0641d9a4.
+
When using memory-mapped I/O map the database file read-only so that stray pointers
+ and/or array overruns in the application cannot accidentally modify the database file.
+
Enhance the 'utc' modifier in the date and time functions so that it is a no-op if
+ the date/time is known to already be in UTC. (This is not a compatibility break since
+ the behavior has long been documented as "undefined" in that case.)
+
Added the ".changes ON|OFF" and ".vfsinfo" dot-commands.
+
Translate between MBCS and UTF8 when
+ running in cmd.exe on Windows.
+
Enhancements to makefiles:
+
Added the --enable-editline and --enable-static-shell options
+ to the various autoconf-generated configure scripts.
+
Omit all use of "awk" in the makefiles, to make building easier for MSVC users.
+
Important fixes:
+
Fix inconsistent integer to floating-point comparison operations that
+ could result in a corrupt index if the index is created on a table
+ column that contains both large integers and floating point values
+ of similar magnitude. Ticket
+ 38a97a87a6.
+
Fix an infinite-loop in the query planner that could occur on
+ malformed common table expressions.
+
Fix a 16-month-old bug in the query planner that could generate incorrect results
+ when a scalar subquery attempts to use the block sorting optimization. Ticket
+ cb3aa0641d9a4.
+
+
Additional changes in version 3.10.2 (2016-01-20):
+
+
Critical bug fix:
+
Version 3.10.0 introduced a case-folding bug in the LIKE operator which is fixed
+ by this patch release. Ticket
+ 80369eddd5c94.
+
Other miscellaneous bug fixes:
+
Fix a use-after-free that can occur when SQLite is compiled with -DSQLITE_HAS_CODEC.
+
Fix the build so that it works with -DSQLITE_OMIT_WAL.
+
Fix the configure script for the amalgamation so that the --readline option works again
+ on Raspberry PIs.
+
Added the "EXTRA" option to PRAGMA synchronous that does a sync of the
+ containing directory when a rollback journal is unlinked in DELETE mode,
+ for better durability. The SQLITE_EXTRA_DURABLE compile-time option enables
+ PRAGMA synchronous=EXTRA by default.
+
Fix an issue with incorrect sharing of VDBE temporary registers between
+ co-routines that could cause incorrect query results in obscure cases. Ticket
+ d06a25c84454a.
+
Fix a problem in the sqlite3_result_subtype() interface that could
+ cause problems for the json1 extension under obscure circumstances.
+ Fix for ticket
+ f45ac567eaa9f9.
+
Escape control characters in JSON strings. Fix for ticket
+ ad2559db380abf8.
+
Reenable the xCurrentTime and xGetLastError methods in the built-in
+ unix VFSes as long as SQLITE_OMIT_DEPRECATED is not defined.
+
Backwards Compatibility:
+
Because of continuing security concerns, the two-argument version
+ of the seldom-used and little-known fts3_tokenizer() function is
+ disabled unless SQLite is compiled with the SQLITE_ENABLE_FTS3_TOKENIZER.
+
Added the "EXTRA" option to PRAGMA synchronous that does a sync of the
+ containing directory when a rollback journal is unlinked in DELETE mode,
+ for better durability. The SQLITE_EXTRA_DURABLE compile-time option enables
+ PRAGMA synchronous=EXTRA by default.
+
Fix an issue with incorrect sharing of VDBE temporary registers between
+ co-routines that could cause incorrect query results in obscure cases. Ticket
+ d06a25c84454a.
+
Fix a problem in the sqlite3_result_subtype() interface that could
+ cause problems for the json1 extension under obscure circumstances.
+ Fix for ticket
+ f45ac567eaa9f9.
+
Escape control characters in JSON strings. Fix for ticket
+ ad2559db380abf8.
+
Reenable the xCurrentTime and xGetLastError methods in the built-in
+ unix VFSes as long as SQLITE_OMIT_DEPRECATED is not defined.
+
Backwards Compatibility:
+
Because of continuing security concerns, the two-argument version
+ of the seldom-used and little-known fts3_tokenizer() function is
+ disabled unless SQLite is compiled with the SQLITE_ENABLE_FTS3_TOKENIZER.
+
+
Additional changes in version 3.11.1 (2016-03-03):
+
+
Improvements to the Makefiles and build scripts used by VisualStudio.
+
Fix an FTS5 issue in which the 'optimize' command could cause index corruption.
+
Fix a buffer overread that might occur if FTS5 is used to query a corrupt
+ database file.
+
Increase the maximum "scope" value for the spellfix1 extension from 6 to 30.
+
Enhancements to the Lemon parser generator
+ so that it creates a smaller and faster SQL parser.
+
Only create master journal files if two or more attached databases are all
+ modified, do not have PRAGMA synchronous set to OFF, and
+ do not have the journal_mode set to OFF, MEMORY, or WAL.
+
The query planner is able to optimize IN operators on virtual tables
+ even if the xBestIndex method does not set the
+ sqlite3_index_constraint_usage.omit flag of the
+ virtual table column to the left of the IN operator.
+
The query planner now does a better job of optimizing virtual table
+ accesses in a 3-way or higher join where constraints on the virtual
+ table are split across two or more other tables of the join.
+
More efficient handling of application-defined SQL functions, especially
+ in cases where the application defines hundreds or thousands of
+ custom functions.
+
The query planner considers the LIMIT clause when estimating the cost
+ of ORDER BY.
+
The configure script (on unix) automatically detects
+ pread() and pwrite() and sets compile-time options to use those OS
+ interfaces if they are available.
+
Reduce the amount of memory needed to hold the schema.
+
Other miscellaneous micro-optimizations for improved performance and reduced
+ memory usage.
+
Enhanced the ".stats" command in the command-line shell to show more
+ information about I/O performance obtained from /proc, when available.
+
Bug fixes:
+
Make sure the sqlite3_set_auxdata() values from multiple triggers
+ within a single statement do not interfere with one another.
+ Ticket dc9b1c91.
+
Fix the code generator for expressions of the form "x IN (SELECT...)" where
+ the SELECT statement on the RHS is a correlated subquery.
+ Ticket 5e3c886796e5512e.
+
Enhancements to the Lemon parser generator
+ so that it creates a smaller and faster SQL parser.
+
Only create master journal files if two or more attached databases are all
+ modified, do not have PRAGMA synchronous set to OFF, and
+ do not have the journal_mode set to OFF, MEMORY, or WAL.
+
The query planner is able to optimize IN operators on virtual tables
+ even if the xBestIndex method does not set the
+ sqlite3_index_constraint_usage.omit flag of the
+ virtual table column to the left of the IN operator.
+
The query planner now does a better job of optimizing virtual table
+ accesses in a 3-way or higher join where constraints on the virtual
+ table are split across two or more other tables of the join.
+
More efficient handling of application-defined SQL functions, especially
+ in cases where the application defines hundreds or thousands of
+ custom functions.
+
The query planner considers the LIMIT clause when estimating the cost
+ of ORDER BY.
+
The configure script (on unix) automatically detects
+ pread() and pwrite() and sets compile-time options to use those OS
+ interfaces if they are available.
+
Reduce the amount of memory needed to hold the schema.
+
Other miscellaneous micro-optimizations for improved performance and reduced
+ memory usage.
+
Enhanced the ".stats" command in the command-line shell to show more
+ information about I/O performance obtained from /proc, when available.
+
Bug fixes:
+
Make sure the sqlite3_set_auxdata() values from multiple triggers
+ within a single statement do not interfere with one another.
+ Ticket dc9b1c91.
+
Fix the code generator for expressions of the form "x IN (SELECT...)" where
+ the SELECT statement on the RHS is a correlated subquery.
+ Ticket 5e3c886796e5512e.
+
Enhancements to the Lemon parser generator
+ so that it creates a smaller and faster SQL parser.
+
Only create master journal files if two or more attached databases are all
+ modified, do not have PRAGMA synchronous set to OFF, and
+ do not have the journal_mode set to OFF, MEMORY, or WAL.
+
The query planner is able to optimize IN operators on virtual tables
+ even if the xBestIndex method does not set the
+ sqlite3_index_constraint_usage.omit flag of the
+ virtual table column to the left of the IN operator.
+
The query planner now does a better job of optimizing virtual table
+ accesses in a 3-way or higher join where constraints on the virtual
+ table are split across two or more other tables of the join.
+
More efficient handling of application-defined SQL functions, especially
+ in cases where the application defines hundreds or thousands of
+ custom functions.
+
The query planner considers the LIMIT clause when estimating the cost
+ of ORDER BY.
+
The configure script (on unix) automatically detects
+ pread() and pwrite() and sets compile-time options to use those OS
+ interfaces if they are available.
+
Reduce the amount of memory needed to hold the schema.
+
Other miscellaneous micro-optimizations for improved performance and reduced
+ memory usage.
+
Enhanced the ".stats" command in the command-line shell to show more
+ information about I/O performance obtained from /proc, when available.
+
Bug fixes:
+
Make sure the sqlite3_set_auxdata() values from multiple triggers
+ within a single statement do not interfere with one another.
+ Ticket dc9b1c91.
+
Fix the code generator for expressions of the form "x IN (SELECT...)" where
+ the SELECT statement on the RHS is a correlated subquery.
+ Ticket 5e3c886796e5512e.
+
Additional changes in version 3.12.1 (2016-04-08):
+
+
Fix a boundary condition error introduced by version 3.12.0
+ that can result in a crash during heavy SAVEPOINT usage.
+ Ticket 7f7f8026eda38.
+
Fix views so that they inherit column datatypes from the
+ table that they are defined against, when possible.
+
Fix the query planner so that IS and IS NULL operators are able
+ to drive an index on a LEFT OUTER JOIN.
+
+
Additional changes in version 3.12.2 (2016-04-18):
+
+
Fix a backwards compatibility problem in version 3.12.0 and 3.12.1:
+ Columns declared as "INTEGER" PRIMARY KEY (with quotes around
+ the datatype keyword) were not being recognized as an
+ INTEGER PRIMARY KEY, which resulted in an incompatible database file.
+ Ticket 7d7525cb01b68
+
Fix a bug in the code generator that can cause incorrect results if
+ two or more virtual tables are joined and the virtual table used in
+ outer loop of the join has an IN operator constraint.
+
Correctly interpret negative "PRAGMA cache_size" values when determining
+ the cache size used for sorting large amounts of data.
+
Improved unicode filename handling in the command-line shell on Windows.
+
Improved resistance against goofy query planner decisions caused by
+ incomplete or incorrect modifications to the sqlite_stat1
+ table by the application.
+
Change the temporary directory search algorithm on Unix to allow directories with
+ write and execute permission, but without read permission, to serve as temporary
+ directories. Apply this same standard to the "." fallback directory.
+
Bug Fixes:
+
Fix a problem with the multi-row one-pass DELETE optimization that was
+ causing it to compute incorrect answers with a self-referential subquery in
+ the WHERE clause. Fix for ticket
+ dc6ebeda9396087
+
Fix a possible segfault with DELETE when table is a rowid table with an
+ INTEGER PRIMARY KEY and the WHERE clause contains a OR and
+ the table has one or more indexes that are able to trigger the OR optimization,
+ but none of the indexes reference any table columns other than the INTEGER PRIMARY KEY.
+ Ticket 16c9801ceba49.
+
When checking for the WHERE-clause push-down optimization, verify that all terms
+ of the compound inner SELECT are non-aggregate, not just the last term. Fix for ticket
+ f7f8c97e97597.
+
Fix a locking race condition in Windows that can occur when two or more processes
+ attempt to recover the same hot journal at the same time.
+
SHA1 for sqlite3.c: 9b9171b1e6ce7a980e6b714e9c0d9112657ad552
+
+
Bug fixes backported into patch release 3.12.2 (2016-04-18):
+
+
Fix a backwards compatibility problem in version 3.12.0 and 3.12.1:
+ Columns declared as "INTEGER" PRIMARY KEY (with quotes around
+ the datatype keyword) were not being recognized as an
+ INTEGER PRIMARY KEY, which resulted in an incompatible database file.
+ Ticket 7d7525cb01b68
+
Fix a bug in the code generator that can cause incorrect results if
+ two or more virtual tables are joined and the virtual table used in
+ outer loop of the join has an IN operator constraint.
+
Correctly interpret negative "PRAGMA cache_size" values when determining
+ the cache size used for sorting large amounts of data.
+
+
Bug fixes backported into patch release 3.12.1 (2016-04-08):
+
+
Fix a boundary condition error introduced by version 3.12.0
+ that can result in a crash during heavy SAVEPOINT usage.
+ Ticket 7f7f8026eda38.
+
Fix views so that they inherit column datatypes from the
+ table that they are defined against, when possible.
+
Fix the query planner so that IS and IS NULL operators are able
+ to drive an index on a LEFT OUTER JOIN.
+
+
Add the
+ vfsstat.c
+ loadable extension - a VFS shim that measures I/O
+ together with an eponymous virtual table that provides access to the measurements.
+
Improved algorithm for running queries with both an ORDER BY and a LIMIT where
+ only the inner-most loop naturally generates rows in the correct order.
+
Fix a NULL-pointer dereference/crash that could occurs when a transitive WHERE
+ clause references a non-existent collating sequence. Ticket
+ e8d439c77685eca6.
+
Improved the cost estimation for an index scan which includes a WHERE clause
+ that can be partially or fully evaluated using columns in the index and without
+ having to do a table lookup. This fixes a performance regression that occurred
+ for some obscure queries following the ORDER BY LIMIT optimization introduced
+ in version 3.12.0.
+
Add the
+ vfsstat.c
+ loadable extension - a VFS shim that measures I/O
+ together with an eponymous virtual table that provides access to the measurements.
+
Improved algorithm for running queries with both an ORDER BY and a LIMIT where
+ only the inner-most loop naturally generates rows in the correct order.
+
Fix a NULL-pointer dereference/crash that could occurs when a transitive WHERE
+ clause references a non-existent collating sequence. Ticket
+ e8d439c77685eca6.
+
Improved the cost estimation for an index scan which includes a WHERE clause
+ that can be partially or fully evaluated using columns in the index and without
+ having to do a table lookup. This fixes a performance regression that occurred
+ for some obscure queries following the ORDER BY LIMIT optimization introduced
+ in version 3.12.0.
+
+
Additional changes in version 3.14.1 (2016-08-11):
+
+
A performance enhancement to the page-cache "truncate" operation
+ reduces COMMIT time by dozens of milliseconds on systems with a
+ large page cache.
+
Add the
+ vfsstat.c
+ loadable extension - a VFS shim that measures I/O
+ together with an eponymous virtual table that provides access to the measurements.
+
Improved algorithm for running queries with both an ORDER BY and a LIMIT where
+ only the inner-most loop naturally generates rows in the correct order.
+
Fix a NULL-pointer dereference/crash that could occurs when a transitive WHERE
+ clause references a non-existent collating sequence. Ticket
+ e8d439c77685eca6.
+
Improved the cost estimation for an index scan which includes a WHERE clause
+ that can be partially or fully evaluated using columns in the index and without
+ having to do a table lookup. This fixes a performance regression that occurred
+ for some obscure queries following the ORDER BY LIMIT optimization introduced
+ in version 3.12.0.
+
+
Additional changes in version 3.14.1 (2016-08-11):
+
+
A performance enhancement to the page-cache "truncate" operation
+ reduces COMMIT time by dozens of milliseconds on systems with a
+ large page cache.
+
Additional changes in version 3.14.2 (2016-09-12):
+
+
Improved support for using the STDCALL calling convention in winsqlite3.dll.
+
Fix the sqlite3_trace_v2() interface so that it is disabled if either the
+callback or the mask arguments are zero, in accordance with the documentation.
+
Fix the ".read" command in the command-line shell so that it understands
+that its input is not interactive.
+
Correct affinity computations for a SELECT on the RHS of an IN operator.
+Fix for ticket 199df4168c.
+
The ORDER BY LIMIT optimization is not valid unless the inner-most IN operator
+loop is actually used by the query plan. Fix for
+ticket 0c4df46116e90f92.
+
Fix an internal code generator problem that was causing some DELETE operations
+to no-op. Ticket ef360601
+
Added the --new option to the ".open" dot-command, causing
+ any prior content in the database to be purged prior to
+ opening.
+
+
Enhance the fts5vocab virtual table to handle "ORDER BY term" efficiently.
+
Miscellaneous micro-optimizations reduce CPU usage by more than 7%
+ on common workloads. Most optimization in this release has been on the
+ front-end (sqlite3_prepare_v2()).
+
Bug Fixes:
+
The multiply operator now correctly detects 64-bit integer overflow
+ and promotes to floating point in all corner-cases. Fix for ticket
+ 1ec41379c9c1e400.
+
Correct handling of columns with redundant unique indexes when those
+ columns are used on the LHS of an IN operator. Fix for ticket
+ 0eab1ac759.
+
Ensure that the AUTOINCREMENT counters in the sqlite_sequence
+ table are initialized doing "Xfer Optimization" on "INSERT ... SELECT"
+ statements. Fix for ticket
+ 7b3328086a5c116c.
+
Make sure the ORDER BY LIMIT optimization
+ (from check-in 559733b09e)
+ works with IN operators on INTEGER PRIMARY KEYs. Fix for ticket
+ 96c1454c
+
Added the --new option to the ".open" dot-command, causing
+ any prior content in the database to be purged prior to
+ opening.
+
+
Enhance the fts5vocab virtual table to handle "ORDER BY term" efficiently.
+
Miscellaneous micro-optimizations reduce CPU usage by more than 7%
+ on common workloads. Most optimization in this release has been on the
+ front-end (sqlite3_prepare_v2()).
+
Bug Fixes:
+
The multiply operator now correctly detects 64-bit integer overflow
+ and promotes to floating point in all corner-cases. Fix for ticket
+ 1ec41379c9c1e400.
+
Correct handling of columns with redundant unique indexes when those
+ columns are used on the LHS of an IN operator. Fix for ticket
+ 0eab1ac759.
+
Ensure that the AUTOINCREMENT counters in the sqlite_sequence
+ table are initialized doing "Xfer Optimization" on "INSERT ... SELECT"
+ statements. Fix for ticket
+ 7b3328086a5c116c.
+
Make sure the ORDER BY LIMIT optimization
+ (from check-in 559733b09e)
+ works with IN operators on INTEGER PRIMARY KEYs. Fix for ticket
+ 96c1454c
+
+
Additional changes in version 3.15.1 (2016-11-04):
Fix the VACUUM command so that it spills excess content to disk rather
+ than holding everything in memory, and possible causing an out-of-memory
+ error for larger database files. This fixes an issue introduced by
+ version 3.15.0.
+
Fix a case (present since 3.8.0 - 2013-08-26)
+ where OR-connected terms in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ 34a579141b2c5ac.
+
Fix a case where the use of row values in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ fef4bb4bd9185ec8f.
+
Added the --new option to the ".open" dot-command, causing
+ any prior content in the database to be purged prior to
+ opening.
+
+
Enhance the fts5vocab virtual table to handle "ORDER BY term" efficiently.
+
Miscellaneous micro-optimizations reduce CPU usage by more than 7%
+ on common workloads. Most optimization in this release has been on the
+ front-end (sqlite3_prepare_v2()).
+
Bug Fixes:
+
The multiply operator now correctly detects 64-bit integer overflow
+ and promotes to floating point in all corner-cases. Fix for ticket
+ 1ec41379c9c1e400.
+
Correct handling of columns with redundant unique indexes when those
+ columns are used on the LHS of an IN operator. Fix for ticket
+ 0eab1ac759.
+
Ensure that the AUTOINCREMENT counters in the sqlite_sequence
+ table are initialized doing "Xfer Optimization" on "INSERT ... SELECT"
+ statements. Fix for ticket
+ 7b3328086a5c116c.
+
Make sure the ORDER BY LIMIT optimization
+ (from check-in 559733b09e)
+ works with IN operators on INTEGER PRIMARY KEYs. Fix for ticket
+ 96c1454c
+
+
Additional changes in version 3.15.1 (2016-11-04):
Fix the VACUUM command so that it spills excess content to disk rather
+ than holding everything in memory, and possible causing an out-of-memory
+ error for larger database files. This fixes an issue introduced by
+ version 3.15.0.
+
Fix a case (present since 3.8.0 - 2013-08-26)
+ where OR-connected terms in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ 34a579141b2c5ac.
+
Fix a case where the use of row values in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ fef4bb4bd9185ec8f.
+
+
Additional changes in version 3.15.2 (2016-11-28):
+
+
Multiple bug fixes to the row value logic that was introduced in version 3.15.0.
+
Fix a NULL pointer dereference in ATTACH/DETACH following a maliciously constructed
+ syntax error. Ticket
+ 2f1b168ab4d4844.
+
Fix a crash that can occur following an out-of-memory condition
+ in the built-in instr() function.
+
In the JSON extension, fix the JSON validator so that it correctly rejects
+ invalid backslash escapes within strings.
+
Fix a long-standing bug in the query planner that caused incorrect results
+ on a LEFT JOIN where the left-hand table is a subquery and the join constraint
+ is a bare column name coming from the left-hand subquery. Ticket
+ 2df0107b.
+
Correctly handle the integer literal -0x8000000000000000 in the query planner.
+
Fix a long-standing bug in the query planner that caused incorrect results
+ on a LEFT JOIN where the left-hand table is a subquery and the join constraint
+ is a bare column name coming from the left-hand subquery. Ticket
+ 2df0107b.
+
Correctly handle the integer literal -0x8000000000000000 in the query planner.
+
+
Additional changes in version 3.16.1 (2017-01-03):
+
+
Fix a bug concerning the use of row values within triggers
+ (see ticket 8c9458e7)
+ that was in version 3.15.0 but was not reported until moments after the 3.16.0
+ release was published.
+
Fix a long-standing bug in the query planner that caused incorrect results
+ on a LEFT JOIN where the left-hand table is a subquery and the join constraint
+ is a bare column name coming from the left-hand subquery. Ticket
+ 2df0107b.
+
Correctly handle the integer literal -0x8000000000000000 in the query planner.
+
+
Additional changes in version 3.16.1 (2017-01-03):
+
+
Fix a bug concerning the use of row values within triggers
+ (see ticket 8c9458e7)
+ that was in version 3.15.0 but was not reported until moments after the 3.16.0
+ release was published.
+
+
Additional changes in version 3.16.2 (2017-01-06):
+
+
Fix the REPLACE statement for
+ WITHOUT ROWID tables that lack secondary indexes so that
+ it works correctly with triggers and foreign keys. This was a new bug
+ caused by performance optimizations added in version 3.16.0.
+ Ticket 30027b613b4
+
Fix the sqlite3_value_text() interface so that it correctly
+ translates content generated by zeroblob() into a string of all
+ 0x00 characters. This is a long-standing issue discovered after the
+ 3.16.1 release by OSS-Fuzz
+
Fix the bytecode generator to deal with a subquery in the FROM clause
+ that is itself a UNION ALL where one side of the UNION ALL is a view
+ that contains an ORDER BY. This is a long-standing issue that was
+ discovered after the release of 3.16.1. See ticket
+ 190c2507.
+
Adjust the sqlite3_column_count() API so it more often returns the same
+ values for PRAGMA statements as it did in prior releases, to
+ minimize disruption to applications that might be using that
+ interface in unexpected ways.
+
Increase the default lookaside
+ size from 512,125 to 1200,100
+ as this provides better performance while only adding 56KB
+ of extra memory per connection. Memory-sensitive
+ applications can restore the old
+ default at compile-time, start-time, or run-time.
+
Use compiler built-ins __builtin_sub_overflow(), __builtin_add_overflow(),
+ and __builtin_mul_overflow() when available. (All compiler
+ built-ins can be omitted with the SQLITE_DISABLE_INTRINSIC compile-time
+ option.)
+
Added the SQLITE_ENABLE_NULL_TRIM compile-time option, which
+ can result in significantly smaller database files for some
+ applications, at the risk of being incompatible with older
+ versions of SQLite.
+
In the command-line shell, enhance the ".mode" command so that it
+ restores the default column and row separators for modes "line",
+ "list", "column", and "tcl".
+
Enhance the
+ Lemon parser generator
+ so that it can store the parser object as a stack variable rather than
+ allocating space from the heap and make use of that enhancement in
+ the amalgamation.
+
Throw an error if the ON clause of a LEFT JOIN references tables
+ to the right of the ON clause. This is the same behavior as
+ PostgreSQL. Formerly, SQLite silently converted the LEFT JOIN
+ into an INNER JOIN. Fix for ticket
+ 25e335f802dd.
+
Use the correct affinity for columns of automatic indexes. Ticket
+ 7ffd1ca1d2ad4ec.
+
The SQLite version identifier returned by the sqlite_source_id() SQL function
+ and the sqlite3_sourceid() C API and found in the SQLITE_SOURCE_ID macro is
+ now a 64-digit SHA3-256 hash instead of a 40-digit SHA1 hash.
+
Enhance the LIKE optimization so that it works for arbitrary expressions on
+ the left-hand side as long as the LIKE pattern on the right-hand side does not
+ begin with a digit or minus sign.
+
Enhance the query plans for joins to detect empty tables early and
+ halt without doing unnecessary work.
+
Enhance the sqlite3_mprintf() family of interfaces and the printf SQL function
+ to put comma separators at the thousands marks for integers, if the "," format modifier
+ is used in between the "%" and the "d" (example: "%,d").
+
Begin enforcing SQLITE_LIMIT_VDBE_OP. This can be used, for example, to prevent
+ excessively large prepared statements in systems that accept SQL queries from
+ untrusted users.
+
Various performance improvements.
+
Bug Fixes:
+
Ensure that indexed expressions with collating sequences are handled correctly.
+ Fix for ticket eb703ba7b50c1a5.
+
Fix a potential segfault in complex recursive triggers, resulting from a
+ bug in the OP_Once opcode introduced as part of a performance optimization in
+ version 3.15.0.
+ Ticket 06796225f59c057c
+
In the RBU extension, add extra sync operations to avoid the possibility of
+ corruption following a power failure.
+
The sqlite3_trace_v2() output for nested SQL statements should always begin
+ with a "--" comment marker.
+
The SQLite version identifier returned by the sqlite_source_id() SQL function
+ and the sqlite3_sourceid() C API and found in the SQLITE_SOURCE_ID macro is
+ now a 64-digit SHA3-256 hash instead of a 40-digit SHA1 hash.
+
Enhance the LIKE optimization so that it works for arbitrary expressions on
+ the left-hand side as long as the LIKE pattern on the right-hand side does not
+ begin with a digit or minus sign.
+
Enhance the query plans for joins to detect empty tables early and
+ halt without doing unnecessary work.
+
Enhance the sqlite3_mprintf() family of interfaces and the printf SQL function
+ to put comma separators at the thousands marks for integers, if the "," format modifier
+ is used in between the "%" and the "d" (example: "%,d").
+
Begin enforcing SQLITE_LIMIT_VDBE_OP. This can be used, for example, to prevent
+ excessively large prepared statements in systems that accept SQL queries from
+ untrusted users.
+
Various performance improvements.
+
Bug Fixes:
+
Ensure that indexed expressions with collating sequences are handled correctly.
+ Fix for ticket eb703ba7b50c1a5.
+
Fix a potential segfault in complex recursive triggers, resulting from a
+ bug in the OP_Once opcode introduced as part of a performance optimization in
+ version 3.15.0.
+ Ticket 06796225f59c057c
+
In the RBU extension, add extra sync operations to avoid the possibility of
+ corruption following a power failure.
+
The sqlite3_trace_v2() output for nested SQL statements should always begin
+ with a "--" comment marker.
+
+
Additional changes in version 3.18.1 (2017-06-16):
+
+
Fix a bug associated with auto_vacuum that can lead to database
+ corruption. The bug was introduced in version 3.16.0 (2017-01-02).
+ Ticket fda22108.
+
The SQLite version identifier returned by the sqlite_source_id() SQL function
+ and the sqlite3_sourceid() C API and found in the SQLITE_SOURCE_ID macro is
+ now a 64-digit SHA3-256 hash instead of a 40-digit SHA1 hash.
+
Enhance the LIKE optimization so that it works for arbitrary expressions on
+ the left-hand side as long as the LIKE pattern on the right-hand side does not
+ begin with a digit or minus sign.
+
Enhance the query plans for joins to detect empty tables early and
+ halt without doing unnecessary work.
+
Enhance the sqlite3_mprintf() family of interfaces and the printf SQL function
+ to put comma separators at the thousands marks for integers, if the "," format modifier
+ is used in between the "%" and the "d" (example: "%,d").
+
Begin enforcing SQLITE_LIMIT_VDBE_OP. This can be used, for example, to prevent
+ excessively large prepared statements in systems that accept SQL queries from
+ untrusted users.
+
Various performance improvements.
+
Bug Fixes:
+
Ensure that indexed expressions with collating sequences are handled correctly.
+ Fix for ticket eb703ba7b50c1a5.
+
Fix a potential segfault in complex recursive triggers, resulting from a
+ bug in the OP_Once opcode introduced as part of a performance optimization in
+ version 3.15.0.
+ Ticket 06796225f59c057c
+
In the RBU extension, add extra sync operations to avoid the possibility of
+ corruption following a power failure.
+
The sqlite3_trace_v2() output for nested SQL statements should always begin
+ with a "--" comment marker.
+
+
Additional changes in version 3.18.1 (2017-06-16):
+
+
Fix a bug associated with auto_vacuum that can lead to database
+ corruption. The bug was introduced in version 3.16.0 (2017-01-02).
+ Ticket fda22108.
+
+
Additional changes in version 3.18.2 (2017-06-17):
+
+
Fix a bug that might cause duplicate output rows when an IN operator is
+ used in the WHERE clause.
+ Ticket 61fe9745.
+
The SQLITE_READauthorizer callback is invoked once
+ with a column name that is an empty string
+ for every table referenced in a query from which no columns are extracted.
+
When using an index on an expression, try to use expression values already
+ available in the index, rather than loading the original columns and recomputing
+ the expression.
+
Enhance the flattening optimization so that it is able to flatten views
+ on the right-hand side of a LEFT JOIN.
+
Use replace() instead of char() for escaping newline and carriage-return
+ characters embedded in strings in the .dump output from the command-line shell.
+
Avoid unnecessary foreign key processing in UPDATE statements that do not
+ touch the columns that are constrained by the foreign keys.
+
On a DISTINCT query that uses an index, try to skip ahead to the next distinct
+ entry using the index rather than stepping through rows, when an appropriate
+ index is available.
+
Avoid unnecessary invalidation of sqlite3_blob handles when making
+ changes to unrelated tables.
+
Transfer any terms of the HAVING clause that use only columns mentioned in
+ the GROUP BY clause over to the WHERE clause for faster processing.
+
Reuse the same materialization of a VIEW if that VIEW appears more than
+ once in the same query.
+
Enhance PRAGMA integrity_check so that it identifies tables that have two
+ or more rows with the same rowid.
+
Enhance the FTS5 query syntax so that column filters
+ may be applied to arbitrary expressions.
+
Enhance the json_extract() function to cache and reuse parses of JSON
+ input text.
+
Fix a bug in the b-tree logic that can result in incorrect duplicate answers
+ for IN operator queries. Ticket
+ 61fe9745
+
Disallow leading zeros in numeric constants in JSON. Fix for ticket
+ b93be8729a895a528e2.
+
Disallow control characters inside of strings in JSON. Fix for ticket
+ 6c9b5514077fed34551.
+
Limit the depth of recursion for JSON objects and arrays in order to avoid
+ excess stack usage in the recursive descent parser. Fix for ticket
+ 981329adeef51011052.
+
The SQLITE_READauthorizer callback is invoked once
+ with a column name that is an empty string
+ for every table referenced in a query from which no columns are extracted.
+
When using an index on an expression, try to use expression values already
+ available in the index, rather than loading the original columns and recomputing
+ the expression.
+
Enhance the flattening optimization so that it is able to flatten views
+ on the right-hand side of a LEFT JOIN.
+
Use replace() instead of char() for escaping newline and carriage-return
+ characters embedded in strings in the .dump output from the command-line shell.
+
Avoid unnecessary foreign key processing in UPDATE statements that do not
+ touch the columns that are constrained by the foreign keys.
+
On a DISTINCT query that uses an index, try to skip ahead to the next distinct
+ entry using the index rather than stepping through rows, when an appropriate
+ index is available.
+
Avoid unnecessary invalidation of sqlite3_blob handles when making
+ changes to unrelated tables.
+
Transfer any terms of the HAVING clause that use only columns mentioned in
+ the GROUP BY clause over to the WHERE clause for faster processing.
+
Reuse the same materialization of a VIEW if that VIEW appears more than
+ once in the same query.
+
Enhance PRAGMA integrity_check so that it identifies tables that have two
+ or more rows with the same rowid.
+
Enhance the FTS5 query syntax so that column filters
+ may be applied to arbitrary expressions.
+
Enhance the json_extract() function to cache and reuse parses of JSON
+ input text.
+
Fix a bug in the b-tree logic that can result in incorrect duplicate answers
+ for IN operator queries. Ticket
+ 61fe9745
+
Disallow leading zeros in numeric constants in JSON. Fix for ticket
+ b93be8729a895a528e2.
+
Disallow control characters inside of strings in JSON. Fix for ticket
+ 6c9b5514077fed34551.
+
Limit the depth of recursion for JSON objects and arrays in order to avoid
+ excess stack usage in the recursive descent parser. Fix for ticket
+ 981329adeef51011052.
+
+
Additional changes in version 3.19.1 (2017-05-24):
The SQLITE_READauthorizer callback is invoked once
+ with a column name that is an empty string
+ for every table referenced in a query from which no columns are extracted.
+
When using an index on an expression, try to use expression values already
+ available in the index, rather than loading the original columns and recomputing
+ the expression.
+
Enhance the flattening optimization so that it is able to flatten views
+ on the right-hand side of a LEFT JOIN.
+
Use replace() instead of char() for escaping newline and carriage-return
+ characters embedded in strings in the .dump output from the command-line shell.
+
Avoid unnecessary foreign key processing in UPDATE statements that do not
+ touch the columns that are constrained by the foreign keys.
+
On a DISTINCT query that uses an index, try to skip ahead to the next distinct
+ entry using the index rather than stepping through rows, when an appropriate
+ index is available.
+
Avoid unnecessary invalidation of sqlite3_blob handles when making
+ changes to unrelated tables.
+
Transfer any terms of the HAVING clause that use only columns mentioned in
+ the GROUP BY clause over to the WHERE clause for faster processing.
+
Reuse the same materialization of a VIEW if that VIEW appears more than
+ once in the same query.
+
Enhance PRAGMA integrity_check so that it identifies tables that have two
+ or more rows with the same rowid.
+
Enhance the FTS5 query syntax so that column filters
+ may be applied to arbitrary expressions.
+
Enhance the json_extract() function to cache and reuse parses of JSON
+ input text.
+
Fix a bug in the b-tree logic that can result in incorrect duplicate answers
+ for IN operator queries. Ticket
+ 61fe9745
+
Disallow leading zeros in numeric constants in JSON. Fix for ticket
+ b93be8729a895a528e2.
+
Disallow control characters inside of strings in JSON. Fix for ticket
+ 6c9b5514077fed34551.
+
Limit the depth of recursion for JSON objects and arrays in order to avoid
+ excess stack usage in the recursive descent parser. Fix for ticket
+ 981329adeef51011052.
+
+
Additional changes in version 3.19.1 (2017-05-24):
The SQLITE_READauthorizer callback is invoked once
+ with a column name that is an empty string
+ for every table referenced in a query from which no columns are extracted.
+
When using an index on an expression, try to use expression values already
+ available in the index, rather than loading the original columns and recomputing
+ the expression.
+
Enhance the flattening optimization so that it is able to flatten views
+ on the right-hand side of a LEFT JOIN.
+
Use replace() instead of char() for escaping newline and carriage-return
+ characters embedded in strings in the .dump output from the command-line shell.
+
Avoid unnecessary foreign key processing in UPDATE statements that do not
+ touch the columns that are constrained by the foreign keys.
+
On a DISTINCT query that uses an index, try to skip ahead to the next distinct
+ entry using the index rather than stepping through rows, when an appropriate
+ index is available.
+
Avoid unnecessary invalidation of sqlite3_blob handles when making
+ changes to unrelated tables.
+
Transfer any terms of the HAVING clause that use only columns mentioned in
+ the GROUP BY clause over to the WHERE clause for faster processing.
+
Reuse the same materialization of a VIEW if that VIEW appears more than
+ once in the same query.
+
Enhance PRAGMA integrity_check so that it identifies tables that have two
+ or more rows with the same rowid.
+
Enhance the FTS5 query syntax so that column filters
+ may be applied to arbitrary expressions.
+
Enhance the json_extract() function to cache and reuse parses of JSON
+ input text.
+
Fix a bug in the b-tree logic that can result in incorrect duplicate answers
+ for IN operator queries. Ticket
+ 61fe9745
+
Disallow leading zeros in numeric constants in JSON. Fix for ticket
+ b93be8729a895a528e2.
+
Disallow control characters inside of strings in JSON. Fix for ticket
+ 6c9b5514077fed34551.
+
Limit the depth of recursion for JSON objects and arrays in order to avoid
+ excess stack usage in the recursive descent parser. Fix for ticket
+ 981329adeef51011052.
+
+
Additional changes in version 3.19.1 (2017-05-24):
Additional changes in version 3.19.3 (2017-06-08):
+
+
Fix a bug associated with auto_vacuum that can lead to database
+ corruption. The bug was introduced in version 3.16.0 (2017-01-02).
+ Ticket fda22108.
+
Fix a bug that can lead to database corruption if there are two
+open connections to the same database and one connection does a VACUUM
+and the second makes some change to the database.
+
Allow "?" parameters in the LIMIT clause.
+
Fix VACUUM so that it works with AUTOINCREMENT.
+
Fix a race condition in AUTOVACUUM that can lead to corrupt databases
+
Add a numeric version number to the sqlite3.h include file.
+
Other minor bug fixes and performance enhancements.
Fix a bug in autovacuum that could cause database corruption if
+a CREATE UNIQUE INDEX fails because of a constraint violation.
+This problem only occurs if the new autovacuum feature introduced in
+version 3.1 is turned on.
+
The F_FULLSYNC ioctl (currently only supported on Mac OS X) is disabled
+if the synchronous pragma is set to something other than "full".
+
Add additional forward compatibility to the future version 3.2 database
+file format.
+
Fix a bug in WHERE clauses of the form (rowid<'2')
Backwards-incompatible changes to some extensions in order to take
+ advantage of the improved security offered by the new
+ pointer passing interfaces:
+
+
Added the COMPLETION extension - designed to suggest
+ tab-completions for interactive user interfaces. This is a work in progress.
+ Expect further enhancements in future releases.
+
Added the PRAGMA secure_delete=FAST command. When secure_delete is
+ set to FAST, old content is overwritten with zeros as long as that does
+ not increase the amount of I/O. Deleted content might still persist on
+ the free-page list but will be purged from all b-tree pages.
+
Add support for tab-completion using the COMPLETION extension, for
+ both readline and linenoise.
+
Add the ".cd" command.
+
Enhance the ".schema" command to show the schema of all attached
+ databases.
+
Enhance ".tables" so that it shows the schema names for all attached
+ if the name is anything other than "main".
+
The ".import" command ignores an initial UTF-8 BOM.
+
Added the "--newlines" option to the ".dump" command to cause U+000a and
+ U+000d characters to be output literally rather than escaped using the
+ replace() function.
+
+
Query planner enhancements:
+
+
When generating individual loops for each ORed term of an OR scan,
+ move any constant WHERE expressions outside of the loop, as is
+ done for top-level loops.
+
The query planner examines the values of bound parameters to help
+ determine if a partial index is usable.
+
When deciding between two plans with the same estimated cost, bias
+ the selection toward the one that does not use the sorter.
+
Evaluate WHERE clause constraints involving correlated subqueries
+ last, in the hope that they never have be evaluated at all.
+
Do not use the flattening optimization for a sub-query on the RHS
+ of a LEFT JOIN if that subquery reads data from a virtual table as
+ doing so prevents the query planner from creating automatic indexes
+ on the results of the sub-query, which can slow down the query.
+
Miscellaneous optimizations result in a 2% reduction in CPU cycles used.
+
Bug Fixes:
+
Fix the behavior of sqlite3_column_name() for queries that use the
+ flattening optimization so that the result is consistent with other
+ queries that do not use that optimization, and with PostgreSQL, MySQL,
+ and SQLServer. Ticket de3403bf5ae.
+
Fix the query planner so that it knows not to use automatic indexes
+ on the right table of LEFT JOIN if the WHERE clause uses the IS operator.
+ Fix for ce68383bf6aba.
+
Ensure that the query planner knows that any column of a
+ flattened LEFT JOIN can be NULL even
+ if that column is labeled with "NOT NULL". Fix for ticket
+ 892fc34f173e99d8.
+
Backwards-incompatible changes to some extensions in order to take
+ advantage of the improved security offered by the new
+ pointer passing interfaces:
+
+
Added the COMPLETION extension - designed to suggest
+ tab-completions for interactive user interfaces. This is a work in progress.
+ Expect further enhancements in future releases.
+
Added the PRAGMA secure_delete=FAST command. When secure_delete is
+ set to FAST, old content is overwritten with zeros as long as that does
+ not increase the amount of I/O. Deleted content might still persist on
+ the free-page list but will be purged from all b-tree pages.
+
Add support for tab-completion using the COMPLETION extension, for
+ both readline and linenoise.
+
Add the ".cd" command.
+
Enhance the ".schema" command to show the schema of all attached
+ databases.
+
Enhance ".tables" so that it shows the schema names for all attached
+ if the name is anything other than "main".
+
The ".import" command ignores an initial UTF-8 BOM.
+
Added the "--newlines" option to the ".dump" command to cause U+000a and
+ U+000d characters to be output literally rather than escaped using the
+ replace() function.
+
+
Query planner enhancements:
+
+
When generating individual loops for each ORed term of an OR scan,
+ move any constant WHERE expressions outside of the loop, as is
+ done for top-level loops.
+
The query planner examines the values of bound parameters to help
+ determine if a partial index is usable.
+
When deciding between two plans with the same estimated cost, bias
+ the selection toward the one that does not use the sorter.
+
Evaluate WHERE clause constraints involving correlated subqueries
+ last, in the hope that they never have be evaluated at all.
+
Do not use the flattening optimization for a sub-query on the RHS
+ of a LEFT JOIN if that subquery reads data from a virtual table as
+ doing so prevents the query planner from creating automatic indexes
+ on the results of the sub-query, which can slow down the query.
+
Miscellaneous optimizations result in a 2% reduction in CPU cycles used.
+
Bug Fixes:
+
Fix the behavior of sqlite3_column_name() for queries that use the
+ flattening optimization so that the result is consistent with other
+ queries that do not use that optimization, and with PostgreSQL, MySQL,
+ and SQLServer. Ticket de3403bf5ae.
+
Fix the query planner so that it knows not to use automatic indexes
+ on the right table of LEFT JOIN if the WHERE clause uses the IS operator.
+ Fix for ce68383bf6aba.
+
Ensure that the query planner knows that any column of a
+ flattened LEFT JOIN can be NULL even
+ if that column is labeled with "NOT NULL". Fix for ticket
+ 892fc34f173e99d8.
+
Take advantage of the atomic-write capabilities in the
+ F2FS filesystem when available, for
+ greatly reduced transaction overhead. This currently requires the
+ SQLITE_ENABLE_BATCH_ATOMIC_WRITE compile-time option.
+
Allow ATTACH and DETACH commands to work inside of a transaction.
+
The "fsync()" that occurs after the header is written in a WAL reset
+ now uses the sync settings for checkpoints. This means it will use a
+ "fullfsync" on macs if PRAGMA checkpoint_fullfsync set on.
+
The sqlite3_sourceid() function tries to detect if the source code has
+ been modified from what is checked into version control and if there are
+ modifications, the last four characters of the version hash are shown as
+ "alt1" or "alt2". The objective is to detect accidental and/or careless
+ edits. A forger can subvert this feature.
+
Improved de-quoting of column names for CREATE TABLE AS statements with
+ an aggregate query on the right-hand side.
+
Fewer "stat()" system calls issued by the unix VFS.
+
Enhanced PRAGMA integrity_check and PRAGMA quick_check to detect obscure
+ row corruption that they were formerly missing. Also update both pragmas
+ so that they return error text rather than SQLITE_CORRUPT when encountering
+ corruption in records.
+
The query planner now prefers to implement FROM-clause subqueries using
+ co-routines rather using the query flattener optimization. Support for
+ the use of co-routines for subqueries may no longer be disabled.
+
Pass information about !=, IS, IS NOT, NOT NULL, and IS NULL constraints
+ into the xBestIndex method of virtual tables.
+
Enhanced the CSV virtual table so that it accepts the last row of
+ input if the final new-line character is missing.
+
Remove the rarely-used "scratch" memory allocator. Replace it with the
+ SQLITE_CONFIG_SMALL_MALLOC configuration setting that gives SQLite
+ a hint that large memory allocations should be avoided when possible.
+
Added the
+ swarm virtual table
+ to the existing union virtual table extension.
+
Add a new type of fts5vocab virtual table - "instance" - that provides
+ direct access to an FTS5 full-text index at the lowest possible level.
+
Remove a call to rand_s() in the Windows VFS since it was causing problems
+ in Firefox on some older laptops.
+
The src/shell.c source code
+ to the command-line shell is no longer under version control. That file
+ is now generated as part of the build process.
+
Fix a segfault that can occur for queries that use table-valued functions
+ in an IN or EXISTS subquery.
+ Ticket b899b6042f97f5
+
Fix a potential integer overflow problem when compiling a particular
+ horrendous common table expression. This was another problem discovered
+ by OSSFuzz. Check-in 6ee8cb6ae5.
+
Fix a potential out-of-bound read when querying a corrupt database file,
+ a problem detected by Natalie Silvanovich of Google Project Zero.
+ Check-in 04925dee41a21f.
+
The output of sqlite3_trace_v2() now shows each individual SQL statement
+ run within a trigger.
+
Add the ability to read from WAL mode databases even if the application
+ lacks write permission on the database and its containing directory, as long as
+ the -shm and -wal files exist in that directory.
+
The sqlite_btreeinfo
+ eponymous virtual table for introspecting and estimating the sizes of
+ the btrees in a database.
+
The Append VFS is a
+ VFS shim that allows an SQLite database to be appended to some other
+ file. This allows (for example) a database to be appended to an
+ executable that then opens and reads the database.
+
+
Query planner enhancements:
+
+
The optimization that uses an index to quickly compute an
+ aggregate min() or max() is extended to work with
+ indexes on expressions.
+
The decision of whether to implement a FROM-clause subquery
+ as a co-routine or using query flattening
+ now considers whether
+ the result set of the outer query is "complex" (if it
+ contains functions or expression subqueries). A complex result
+ set biases the decision toward the use of co-routines.
+
The planner avoids query plans that use indexes with unknown
+ collating functions.
+
The planner omits unused LEFT JOINs even if they are not the
+ right-most joins of a query.
+
+
Other performance optimizations:
+
+
A smaller and faster implementation of text to floating-point
+ conversion subroutine: sqlite3AtoF().
+
Added the ".eqp trigger" variant of the ".eqp" command
+
Enhance the ".lint fkey-indexes" command so that it works with
+ WITHOUT ROWID tables.
+
If the filename argument to the shell is a ZIP archive rather than
+ an SQLite database, then the shell automatically opens that ZIP
+ archive using the Zipfile virtual table.
+
Provide the sqlite_offset(X) SQL function that returns
+ the byte offset into the database file to the beginning of the record
+ holding value X, when compiling with -DSQLITE_ENABLE_OFFSET_SQL_FUNC.
+
Bug fixes:
+
+
Infinite loop on an UPDATE that uses an OR operator in the WHERE clause.
+ Problem introduced with 3.17.0 and reported on the mailing list about
+ one year later. Ticket
+ 47b2581aa9bfecec.
+
Incorrect query results when the skip-ahead-distinct optimization is
+ used.
+ Ticket ef9318757b152e3a.
+
Incorrect query results on a join with a ORDER BY DESC. Ticket
+ 123c9ba32130a6c9.
+
Inconsistent result set column names between CREATE TABLE AS
+ and a simple SELECT. Ticket
+ 3b4450072511e621
+
Assertion fault when doing REPLACE on an index on an expression.
+ Ticket dc3f932f5a147771
+
Assertion fault when doing an IN operator on a constant index.
+ Ticket aa98619ad08ddcab
+
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.
+
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.
+
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.
+
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
+
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
+
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
+
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.
+
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.
+
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.
+
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
+
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
+
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
+
Add C-language APIs for dynamic strings based on the
+ sqlite3_str object.
+
Enhance ALTER TABLE so that it recognizes "true" and "false" as
+ valid arguments to DEFAULT.
+
Add the sorter-reference optimization as a compile-time option.
+ Only available if compiled with SQLITE_ENABLE_SORTER_REFERENCES.
+
Improve the format of the EXPLAIN QUERY PLAN raw output, so that
+ it gives better information about the query plan and about the
+ relationships between the various components of the plan.
+
Automatically intercepts the raw EXPLAIN QUERY PLAN
+ output and reformats it into an ASCII-art graph.
+
Lines that begin with "#" and that are not in the middle of an
+ SQL statement are interpreted as comments.
+
Added the --append option to the ".backup" command.
+
Added the ".dbconfig" command.
+
Performance:
+
UPDATE avoids unnecessary low-level disk writes when the contents
+ of the database file do not actually change.
+ For example, "UPDATE t1 SET x=25 WHERE y=?" generates no extra
+ disk I/O if the value in column x is already 25. Similarly,
+ when doing UPDATE on records that span multiple pages, only
+ the subset of pages that actually change are written to disk.
+ This is a low-level performance optimization only and does not
+ affect the behavior of TRIGGERs or other higher level SQL
+ structures.
+
Queries that use ORDER BY and LIMIT now try to avoid computing
+ rows that cannot possibly come in under the LIMIT. This can greatly
+ improve performance of ORDER BY LIMIT queries, especially when the
+ LIMIT is small relative to the number of unrestricted output rows.
+
The OR optimization is allowed to proceed
+ even if the OR expression has also been converted into an IN
+ expression. Uses of the OR optimization are now also
+ more clearly shown in the EXPLAIN QUERY PLAN output.
+
The query planner is more aggressive about using
+ automatic indexes for views and subqueries for which it is
+ not possible to create a persistent index.
+
Make use of the one-pass UPDATE and DELETE query plans in the
+ R-Tree extension where appropriate.
+
Performance improvements in the LEMON-generated parser.
+
Bug fixes:
+
For the right-hand table of a LEFT JOIN, compute the values
+ of expressions directly rather than loading precomputed values
+ out of an expression index as the expression index might
+ not contain the correct value. Ticket
+ 7fa8049685b50b5aeb0c2
+
Do not attempt to use terms from the WHERE clause to enable
+ indexed lookup of the right-hand table of a LEFT JOIN. Ticket
+ 4ba5abf65c5b0f9a96a7a
+
Fix a memory leak that can occur following a failure to open error
+ in the CSV virtual table
+
Fix the json_each() function so that it returns
+ valid results on its "fullkey" column when the input is a simple value
+ rather than an array or object.
+
Add support for renaming columns within a table using
+ ALTER TABLE table RENAME COLUMN oldname TO newname.
+
Fix table rename feature so that it also updates references
+ to the renamed table in triggers and views.
+
+
Query optimizer improvements:
+
+
Avoid unnecessary loads of columns in an aggregate query that
+ are not within an aggregate function and that are not part
+ of the GROUP BY clause.
+
The IN-early-out optimization: When doing a look-up on a
+ multi-column index and an IN operator is used on a column
+ other than the left-most column, then if no rows match against
+ the first IN value, check to make sure there exist rows that
+ match the columns to the right before continuing with the
+ next IN value.
+
Use the transitive property to try to propagate constant
+ values within the WHERE clause. For example, convert
+ "a=99 AND b=a" into "a=99 AND b=99".
+
+
Use a separate mutex on every inode in the unix VFS, rather than
+ a single mutex shared among them all, for slightly better concurrency
+ in multi-threaded environments.
+
Enhance the PRAGMA integrity_check command for improved detection
+ of problems on the page freelist.
+
Output infinity as 1e999 in the ".dump" command of the
+ command-line shell.
+
The ORDER BY LIMIT optimization might have caused an infinite loop
+ in the byte code of the prepared statement under very obscure
+ circumstances,
+ due to a confluence of minor defects in the query optimizer.
+ Fix for ticket
+ 9936b2fa443fec03ff25
+
On an UPSERT when the order of constraint checks is rearranged,
+ ensure that the affinity transformations on the inserted content
+ occur before any of the constraint checks. Fix for ticket
+ 79cad5e4b2e219dd197242e9e.
+
Avoid using a prepared statement for ".stats on" command of the
+ CLI after it has been closed by the ".eqp full" logicc. Fix for ticket
+ 7be932dfa60a8a6b3b26bcf76.
+
The LIKE optimization was generating incorrect byte-code and hence
+ getting the wrong answer
+ if the left-hand operand has numeric affinity and the right-hand-side
+ pattern is '/%' or if the pattern begins with the ESCAPE character.
+ Fix for ticket
+ c94369cae9b561b1f996d0054b
+
Add support for renaming columns within a table using
+ ALTER TABLE table RENAME COLUMN oldname TO newname.
+
Fix table rename feature so that it also updates references
+ to the renamed table in triggers and views.
+
+
Query optimizer improvements:
+
+
Avoid unnecessary loads of columns in an aggregate query that
+ are not within an aggregate function and that are not part
+ of the GROUP BY clause.
+
The IN-early-out optimization: When doing a look-up on a
+ multi-column index and an IN operator is used on a column
+ other than the left-most column, then if no rows match against
+ the first IN value, check to make sure there exist rows that
+ match the columns to the right before continuing with the
+ next IN value.
+
Use the transitive property to try to propagate constant
+ values within the WHERE clause. For example, convert
+ "a=99 AND b=a" into "a=99 AND b=99".
+
+
Use a separate mutex on every inode in the unix VFS, rather than
+ a single mutex shared among them all, for slightly better concurrency
+ in multi-threaded environments.
+
Enhance the PRAGMA integrity_check command for improved detection
+ of problems on the page freelist.
+
Output infinity as 1e999 in the ".dump" command of the
+ command-line shell.
+
The ORDER BY LIMIT optimization might have caused an infinite loop
+ in the byte code of the prepared statement under very obscure
+ circumstances,
+ due to a confluence of minor defects in the query optimizer.
+ Fix for ticket
+ 9936b2fa443fec03ff25
+
On an UPSERT when the order of constraint checks is rearranged,
+ ensure that the affinity transformations on the inserted content
+ occur before any of the constraint checks. Fix for ticket
+ 79cad5e4b2e219dd197242e9e.
+
Avoid using a prepared statement for ".stats on" command of the
+ CLI after it has been closed by the ".eqp full" logicc. Fix for ticket
+ 7be932dfa60a8a6b3b26bcf76.
+
The LIKE optimization was generating incorrect byte-code and hence
+ getting the wrong answer
+ if the left-hand operand has numeric affinity and the right-hand-side
+ pattern is '/%' or if the pattern begins with the ESCAPE character.
+ Fix for ticket
+ c94369cae9b561b1f996d0054b
+
+
Additional changes in version 3.25.1 (2018-09-18):
+
+
Extra sanity checking added to ALTER TABLE in the 3.25.0 release
+ sometimes raises a false-positive
+ when the table being modified has a trigger that
+ updates a virtual table. The false-positive caused the ALTER
+ TABLE to rollback, thus leaving the schema unchanged.
+ Ticket b41031ea2b537237.
+
The fix in the 3.25.0 release for the endless-loop in the byte-code
+ associated with the ORDER BY LIMIT optimization did not work for
+ some queries involving window functions. An additional correction
+ is required. Ticket
+ 510cde277783b5fb
+
Add support for renaming columns within a table using
+ ALTER TABLE table RENAME COLUMN oldname TO newname.
+
Fix table rename feature so that it also updates references
+ to the renamed table in triggers and views.
+
+
Query optimizer improvements:
+
+
Avoid unnecessary loads of columns in an aggregate query that
+ are not within an aggregate function and that are not part
+ of the GROUP BY clause.
+
The IN-early-out optimization: When doing a look-up on a
+ multi-column index and an IN operator is used on a column
+ other than the left-most column, then if no rows match against
+ the first IN value, check to make sure there exist rows that
+ match the columns to the right before continuing with the
+ next IN value.
+
Use the transitive property to try to propagate constant
+ values within the WHERE clause. For example, convert
+ "a=99 AND b=a" into "a=99 AND b=99".
+
+
Use a separate mutex on every inode in the unix VFS, rather than
+ a single mutex shared among them all, for slightly better concurrency
+ in multi-threaded environments.
+
Enhance the PRAGMA integrity_check command for improved detection
+ of problems on the page freelist.
+
Output infinity as 1e999 in the ".dump" command of the
+ command-line shell.
+
The ORDER BY LIMIT optimization might have caused an infinite loop
+ in the byte code of the prepared statement under very obscure
+ circumstances,
+ due to a confluence of minor defects in the query optimizer.
+ Fix for ticket
+ 9936b2fa443fec03ff25
+
On an UPSERT when the order of constraint checks is rearranged,
+ ensure that the affinity transformations on the inserted content
+ occur before any of the constraint checks. Fix for ticket
+ 79cad5e4b2e219dd197242e9e.
+
Avoid using a prepared statement for ".stats on" command of the
+ CLI after it has been closed by the ".eqp full" logicc. Fix for ticket
+ 7be932dfa60a8a6b3b26bcf76.
+
The LIKE optimization was generating incorrect byte-code and hence
+ getting the wrong answer
+ if the left-hand operand has numeric affinity and the right-hand-side
+ pattern is '/%' or if the pattern begins with the ESCAPE character.
+ Fix for ticket
+ c94369cae9b561b1f996d0054b
+
+
Additional changes in version 3.25.1 (2018-09-18):
+
+
Extra sanity checking added to ALTER TABLE in the 3.25.0 release
+ sometimes raises a false-positive
+ when the table being modified has a trigger that
+ updates a virtual table. The false-positive caused the ALTER
+ TABLE to rollback, thus leaving the schema unchanged.
+ Ticket b41031ea2b537237.
+
The fix in the 3.25.0 release for the endless-loop in the byte-code
+ associated with the ORDER BY LIMIT optimization did not work for
+ some queries involving window functions. An additional correction
+ is required. Ticket
+ 510cde277783b5fb
+
+
Additional changes in version 3.25.2 (2018-09-25):
+
+
Add the PRAGMA legacy_alter_table=ON command that causes the
+ "ALTER TABLE RENAME" command to behave as it did in SQLite versions 3.24.0
+ and earlier: references to the renamed table inside the bodies of triggers
+ and views are not updated. This new pragma provides a compatibility
+ work around for older programs that expected the older, wonky behavior
+ of ALTER TABLE RENAME.
+
Fix a problem with the new window functions implementation that caused
+ a malfunction when complicated expressions involving window functions were used
+ inside of a view.
+
Fixes for various other compiler warnings and minor problems associated
+ with obscure configurations.
+
Add support for renaming columns within a table using
+ ALTER TABLE table RENAME COLUMN oldname TO newname.
+
Fix table rename feature so that it also updates references
+ to the renamed table in triggers and views.
+
+
Query optimizer improvements:
+
+
Avoid unnecessary loads of columns in an aggregate query that
+ are not within an aggregate function and that are not part
+ of the GROUP BY clause.
+
The IN-early-out optimization: When doing a look-up on a
+ multi-column index and an IN operator is used on a column
+ other than the left-most column, then if no rows match against
+ the first IN value, check to make sure there exist rows that
+ match the columns to the right before continuing with the
+ next IN value.
+
Use the transitive property to try to propagate constant
+ values within the WHERE clause. For example, convert
+ "a=99 AND b=a" into "a=99 AND b=99".
+
+
Use a separate mutex on every inode in the unix VFS, rather than
+ a single mutex shared among them all, for slightly better concurrency
+ in multi-threaded environments.
+
Enhance the PRAGMA integrity_check command for improved detection
+ of problems on the page freelist.
+
Output infinity as 1e999 in the ".dump" command of the
+ command-line shell.
+
The ORDER BY LIMIT optimization might have caused an infinite loop
+ in the byte code of the prepared statement under very obscure
+ circumstances,
+ due to a confluence of minor defects in the query optimizer.
+ Fix for ticket
+ 9936b2fa443fec03ff25
+
On an UPSERT when the order of constraint checks is rearranged,
+ ensure that the affinity transformations on the inserted content
+ occur before any of the constraint checks. Fix for ticket
+ 79cad5e4b2e219dd197242e9e.
+
Avoid using a prepared statement for ".stats on" command of the
+ CLI after it has been closed by the ".eqp full" logicc. Fix for ticket
+ 7be932dfa60a8a6b3b26bcf76.
+
The LIKE optimization was generating incorrect byte-code and hence
+ getting the wrong answer
+ if the left-hand operand has numeric affinity and the right-hand-side
+ pattern is '/%' or if the pattern begins with the ESCAPE character.
+ Fix for ticket
+ c94369cae9b561b1f996d0054b
+
+
Additional changes in version 3.25.1 (2018-09-18):
+
+
Extra sanity checking added to ALTER TABLE in the 3.25.0 release
+ sometimes raises a false-positive
+ when the table being modified has a trigger that
+ updates a virtual table. The false-positive caused the ALTER
+ TABLE to rollback, thus leaving the schema unchanged.
+ Ticket b41031ea2b537237.
+
The fix in the 3.25.0 release for the endless-loop in the byte-code
+ associated with the ORDER BY LIMIT optimization did not work for
+ some queries involving window functions. An additional correction
+ is required. Ticket
+ 510cde277783b5fb
+
+
Additional changes in version 3.25.2 (2018-09-25):
+
+
Add the PRAGMA legacy_alter_table=ON command that causes the
+ "ALTER TABLE RENAME" command to behave as it did in SQLite versions 3.24.0
+ and earlier: references to the renamed table inside the bodies of triggers
+ and views are not updated. This new pragma provides a compatibility
+ work around for older programs that expected the older, wonky behavior
+ of ALTER TABLE RENAME.
+
Fix a problem with the new window functions implementation that caused
+ a malfunction when complicated expressions involving window functions were used
+ inside of a view.
+
Fixes for various other compiler warnings and minor problems associated
+ with obscure configurations.
+
+
Additional changes in version 3.25.3 (2018-11-05):
Strengthen defenses against deliberately corrupted database files.
+
Fix a problem in the query planner that results when a row-value expression
+ is used with a PRIMARY KEY with redundant columns. Ticket
+ 1a84668dcfdebaf12415d
+
Fix the query planner so that it works correctly for IS NOT NULL operators
+ in the ON clause of a LEFT JOIN with the SQLITE_ENABLE_STAT4 compile-time option.
+ 65eb38f6e46de8c75e188a17ec
+
Optimization: When doing an UPDATE on a table with indexes on expressions,
+ do not update the expression indexes if they do not refer to any of the columns
+ of the table being updated.
+
Allow the xBestIndex() method of virtual table implementations to return
+ SQLITE_CONSTRAINT to indicate that the proposed query plan is unusable and
+ should not be given further consideration.
+
Added the SQLITE_DBCONFIG_DEFENSIVE option which disables the ability to
+ create corrupt database files using ordinary SQL.
+
Added the PRAGMA legacy_alter_table command, which if enabled causes the
+ ALTER TABLE command to behave like older version of SQLite (prior to
+ version 3.25.0) for compatibility.
+
The SQLITE_HISTORY environment variable, if it exists,
+ specifies the name of the command-line editing history file
+
The --deserialize option associated with opening a new database cause the
+ database file to be read into memory and accessed using the
+ sqlite3_deserialize() API. This simplifies running tests on a database
+ without modifying the file on disk.
+
Honor the SQLITE_DESERIALIZE_READONLY flag, which was previously described
+ in the documentation, but was previously a no-op.
+
Enhance the "deserialize" command of the TCL Interface to give it
+ new "--maxsize N" and "--readonly BOOLEAN" options.
+
+
Enhancements to the CLI, mostly to support testing and debugging
+of the SQLite library itself:
+
+
Add support for ".open --hexdb". The
+ "dbtotxt" utility
+ program used to generate the text for the "hexdb" is added to the
+ source tree.
+
Add support for the "--maxsize N" option on ".open --deserialize".
+
Add the "--memtrace" command-line option, to show all memory allocations
+ and deallocations.
+
Add the ".eqp trace" option on builds with SQLITE_DEBUG, to enable
+ bytecode program listing with indentation and
+ PRAGMA vdbe_trace all in one step.
+
Fix the REPLACE command so that it is no longer able to sneak a
+NULL value into a NOT NULL column even if the NOT NULL column has a default
+value of NULL.
+Ticket e6f1f2e34dceeb1ed6
+
Honor the SQLITE_DESERIALIZE_READONLY flag, which was previously described
+ in the documentation, but was previously a no-op.
+
Enhance the "deserialize" command of the TCL Interface to give it
+ new "--maxsize N" and "--readonly BOOLEAN" options.
+
+
Enhancements to the CLI, mostly to support testing and debugging
+of the SQLite library itself:
+
+
Add support for ".open --hexdb". The
+ "dbtotxt" utility
+ program used to generate the text for the "hexdb" is added to the
+ source tree.
+
Add support for the "--maxsize N" option on ".open --deserialize".
+
Add the "--memtrace" command-line option, to show all memory allocations
+ and deallocations.
+
Add the ".eqp trace" option on builds with SQLITE_DEBUG, to enable
+ bytecode program listing with indentation and
+ PRAGMA vdbe_trace all in one step.
+
Fix the REPLACE command so that it is no longer able to sneak a
+NULL value into a NOT NULL column even if the NOT NULL column has a default
+value of NULL.
+Ticket e6f1f2e34dceeb1ed6
+
Additional changes in version 3.27.1 (2019-02-08):
+
+
Fix a bug in the query optimizer: an adverse interaction between
+the OR optimization and the optimization that tries to use values
+read directly from an expression index instead of recomputing the
+expression.
+Ticket 4e8e4857d32d401f
+
Honor the SQLITE_DESERIALIZE_READONLY flag, which was previously described
+ in the documentation, but was previously a no-op.
+
Enhance the "deserialize" command of the TCL Interface to give it
+ new "--maxsize N" and "--readonly BOOLEAN" options.
+
+
Enhancements to the CLI, mostly to support testing and debugging
+of the SQLite library itself:
+
+
Add support for ".open --hexdb". The
+ "dbtotxt" utility
+ program used to generate the text for the "hexdb" is added to the
+ source tree.
+
Add support for the "--maxsize N" option on ".open --deserialize".
+
Add the "--memtrace" command-line option, to show all memory allocations
+ and deallocations.
+
Add the ".eqp trace" option on builds with SQLITE_DEBUG, to enable
+ bytecode program listing with indentation and
+ PRAGMA vdbe_trace all in one step.
+
Fix the REPLACE command so that it is no longer able to sneak a
+NULL value into a NOT NULL column even if the NOT NULL column has a default
+value of NULL.
+Ticket e6f1f2e34dceeb1ed6
+
Additional changes in version 3.27.1 (2019-02-08):
+
+
Fix a bug in the query optimizer: an adverse interaction between
+the OR optimization and the optimization that tries to use values
+read directly from an expression index instead of recomputing the
+expression.
+Ticket 4e8e4857d32d401f
+
+
Additional changes in version 3.27.2 (2019-02-25):
+
+
Fix a bug in the IN operator that was introduced by an
+ attempted optimization in version 3.27.0. Ticket
+ df46dfb631f75694
+
In queries that are driven by a partial index, avoid unnecessary
+ tests of the constraint named in the WHERE clause of the partial
+ index, since we know that constraint must always be true.
+
Fix the readfile() function so that it returns
+ an empty BLOB rather than throwing an out-of-memory error when
+ reading an empty file.
+
Fix the writefile() function so that when it
+ creates new directories along the path of a new file, it gives them
+ umask permissions rather than the same permissions as the file.
+
Change --update option in the .archive command so that it skips
+ files that are already in the archive and are unchanged. Add the
+ new --insert option that works like --update used to work.
+
Improved optimization of AND and OR operators when one or the other
+ operand is a constant.
+
Enhancements to the LIKE optimization for cases when the left-hand
+ side column has numeric affinity.
+
+
Added the "sqlite_dbdata"
+ virtual table for extracting raw low-level content from an SQLite database,
+ even a database that is corrupt.
+
Improvements to rounding behavior, so that the results of rounding
+ binary numbers using the round() function are closer to what people
+ who are used to thinking in decimal actually expect.
+
Added a REGEXP operator to the parser. There is no function to back
+up this operator in the standard build but users can add their own using
+sqlite3_create_function()
+
Speed improvements and library footprint reductions.
+
Fix byte alignment problems on 64-bit architectures.
+
Many, many minor bug fixes and documentation updates.
Tcl interface allows BLOB values to be transferred to user-defined
+functions
+
Added the "transaction" method to the Tcl interface
+
Allow the DEFAULT value of a column to call functions that have constant
+operands
+
Added the ANALYZE command for gathering statistics on indices and
+using those statistics when picking an index in the optimizer
+
Remove the limit (formerly 100) on the number of terms in the
+WHERE clause
+
The right-hand side of the IN operator can now be a list of expressions
+instead of just a list of constants
+
Rework the optimizer so that it is able to make better use of indices
+
The order of tables in a join is adjusted automatically to make
+better use of indices
+
The IN operator is now a candidate for optimization even if the left-hand
+side is not the left-most term of the index. Multiple IN operators can be
+used with the same index.
+
WHERE clause expressions using BETWEEN and OR are now candidates
+for optimization
+
Added the "case_sensitive_like" pragma and the SQLITE_CASE_SENSITIVE_LIKE
+compile-time option to set its default value to "on".
+
Use indices to help with GLOB expressions and LIKE expressions too
+when the case_sensitive_like pragma is enabled
+
Added support for grave-accent quoting for compatibility with MySQL
Fix an obscure bug that can cause database corruption under the
+following unusual circumstances: A large INSERT or UPDATE statement which
+is part of an even larger transaction fails due to a uniqueness constraint
+but the containing transaction commits.
Change the schema parser so that it will error out if any of
+ the type, name, and tbl_name columns of the sqlite_master table
+ have been corrupted and the database connection is not in
+ writable_schema mode.
+
Change the schema parser so that it will error out if any of
+ the type, name, and tbl_name columns of the sqlite_master table
+ have been corrupted and the database connection is not in
+ writable_schema mode.
+
Added the uuid.c extension module
+ implementing functions for processing RFC-4122 UUIDs.
+
The lookaside memory allocator is enhanced to support two separate memory
+ pools with different sized allocations in each pool. This allows more memory
+ allocations to be covered by lookaside while at the same time reducing the
+ heap memory usage to 48KB per connection, down from 120KB.
+
Added the uuid.c extension module
+ implementing functions for processing RFC-4122 UUIDs.
+
The lookaside memory allocator is enhanced to support two separate memory
+ pools with different sized allocations in each pool. This allows more memory
+ allocations to be covered by lookaside while at the same time reducing the
+ heap memory usage to 48KB per connection, down from 120KB.
+
Additional changes in version 3.31.1 (2020-01-27):
+
+
Revert the data layout for an internal-use-only SQLite data structure.
+ Applications that use SQLite should never reference internal SQLite
+ data structures, but some do anyhow, and a change to one such
+ data structure in 3.30.0 broke a popular and widely-deployed
+ application. Reverting that change in SQLite, at least temporarily,
+ gives developers of misbehaving applications time to fix their code.
+
INSERT and UPDATE statements now always apply column affinity
+ before computing CHECK constraints. This bug fix could, in
+ theory, cause problems for legacy databases with unorthodox
+ CHECK constraints the require the input type for an INSERT
+ is different from the declared column type. See ticket
+ 86ba67afafded936
+ for more information.
+
INSERT and UPDATE statements now always apply column affinity
+ before computing CHECK constraints. This bug fix could, in
+ theory, cause problems for legacy databases with unorthodox
+ CHECK constraints the require the input type for an INSERT
+ is different from the declared column type. See ticket
+ 86ba67afafded936
+ for more information.
+
The ESCAPE clause of a LIKE operator now overrides wildcard
+ characters, so that the behavior matches what PostgreSQL does.
+
+
Additional changes in version 3.32.1 (2020-05-25):
+
+
Fix two long-standing bugs that allow malicious SQL statements
+ to crash the process that is running SQLite. These bugs were announced
+ by a third-party approximately 24 hours after the 3.32.0 release but are
+ not specific to the 3.32.0 release.
+
INSERT and UPDATE statements now always apply column affinity
+ before computing CHECK constraints. This bug fix could, in
+ theory, cause problems for legacy databases with unorthodox
+ CHECK constraints the require the input type for an INSERT
+ is different from the declared column type. See ticket
+ 86ba67afafded936
+ for more information.
+
The ESCAPE clause of a LIKE operator now overrides wildcard
+ characters, so that the behavior matches what PostgreSQL does.
+
+
Additional changes in version 3.32.1 (2020-05-25):
+
+
Fix two long-standing bugs that allow malicious SQL statements
+ to crash the process that is running SQLite. These bugs were announced
+ by a third-party approximately 24 hours after the 3.32.0 release but are
+ not specific to the 3.32.0 release.
+
Other minor compiler-warning fixes and whatnot.
+
+
Additional changes in version 3.32.2 (2020-06-04):
+
+
Fix a long-standing bug in the byte-code engine that can cause a
+ COMMIT command report as success when in fact it failed
+ to commit. Ticket
+ 810dc8038872e212
+
INSERT and UPDATE statements now always apply column affinity
+ before computing CHECK constraints. This bug fix could, in
+ theory, cause problems for legacy databases with unorthodox
+ CHECK constraints the require the input type for an INSERT
+ is different from the declared column type. See ticket
+ 86ba67afafded936
+ for more information.
+
The ESCAPE clause of a LIKE operator now overrides wildcard
+ characters, so that the behavior matches what PostgreSQL does.
+
+
Additional changes in version 3.32.1 (2020-05-25):
+
+
Fix two long-standing bugs that allow malicious SQL statements
+ to crash the process that is running SQLite. These bugs were announced
+ by a third-party approximately 24 hours after the 3.32.0 release but are
+ not specific to the 3.32.0 release.
+
Other minor compiler-warning fixes and whatnot.
+
+
Additional changes in version 3.32.2 (2020-06-04):
+
+
Fix a long-standing bug in the byte-code engine that can cause a
+ COMMIT command report as success when in fact it failed
+ to commit. Ticket
+ 810dc8038872e212
+
+
Additional changes in version 3.32.3 (2020-06-18):
Support for UPDATE FROM following the PostgreSQL syntax.
+
Increase the maximum size of database files to 281 TB.
+
Extended the PRAGMA integrity_check statement so that it can optionally be
+ limited to verifying just a single table and its indexes, rather than the
+ entire database file.
+
Added the decimal extension for doing arbitrary-precision decimal arithmetic.
+
Enhancements to the ieee754 extension for working with IEEE 754 binary64 numbers.
+
Added four new output modes: "box", "json", "markdown",
+ and "table".
+
The "column" output mode automatically expands columns to
+ contain the longest output row and automatically turns
+ ".header" on if it has not been previously set.
+
Add the ability to find a
+ full-index-scan query plan for queries using INDEXED BY
+ which previously would fail with "no query solution".
+
Do a better job of
+ detecting missing, incomplete, and/or dodgy sqlite_stat1
+ data and generates good query plans in spite of the
+ misinformation.
+
Improved performance of queries like "SELECT min(x) FROM t WHERE y IN (?,?,?)"
+ assuming an index on t(x,y).
+
+
In WAL mode, if a writer crashes and leaves the shm file in an inconsistent
+ state, subsequent transactions are now able to recover the shm file even if
+ there are active read transactions. Before this enhancement, shm file recovery
+ that scenario would result in an SQLITE_PROTOCOL error.
+
Added the --tabs command-line option that sets
+ .mode tabs.
+
The --init option reports an error if the file named as its argument
+ cannot be opened. The --init option also now honors the --bail option.
+
+
Query planner improvements:
+
+
Improved estimates for the cost of running a DISTINCT operator.
+
When doing an UPDATE or DELETE using a multi-column index where
+ only a few of the earlier columns of the index are useful for the
+ index lookup, postpone doing the main table seek until after all
+ WHERE clause constraints have been evaluated, in case those
+ constraints can be covered by unused later terms of the index,
+ thus avoiding unnecessary main table seeks.
+
The new OP_SeekScan opcode is used to improve performance of
+ multi-column index look-ups when later columns are constrained
+ by an IN operator.
+
+
The BEGIN IMMEDIATE and BEGIN EXCLUSIVE commands now work even
+ if one or more attached database files are read-only.
+
Improved performance of WAL mode locking primitives in cases where
+ there are hundreds of connections all accessing the same database file
+ at once.
+
Added the --tabs command-line option that sets
+ .mode tabs.
+
The --init option reports an error if the file named as its argument
+ cannot be opened. The --init option also now honors the --bail option.
+
+
Query planner improvements:
+
+
Improved estimates for the cost of running a DISTINCT operator.
+
When doing an UPDATE or DELETE using a multi-column index where
+ only a few of the earlier columns of the index are useful for the
+ index lookup, postpone doing the main table seek until after all
+ WHERE clause constraints have been evaluated, in case those
+ constraints can be covered by unused later terms of the index,
+ thus avoiding unnecessary main table seeks.
+
The new OP_SeekScan opcode is used to improve performance of
+ multi-column index look-ups when later columns are constrained
+ by an IN operator.
+
+
The BEGIN IMMEDIATE and BEGIN EXCLUSIVE commands now work even
+ if one or more attached database files are read-only.
+
Improved performance of WAL mode locking primitives in cases where
+ there are hundreds of connections all accessing the same database file
+ at once.
+
The substr() SQL function can now also be called "substring()" for
+ compatibility with SQL Server.
+
The syntax diagrams are now implemented as
+ Pikchr scripts and rendered
+ as SVG for improved legibility and ease of maintenance.
+
+
Additional changes in version 3.34.1 (2021-01-20):
+
+
Fix a potential use-after-free bug when processing a a subquery with both
+ a correlated WHERE clause and a "HAVING 0" clause and where the parent
+ query is an aggregate.
+
Use less memory when running VACUUM on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+
Add support for the MATERIALIZED and NOT MATERIALIZED hints when
+ specifying common table expressions. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+
The SQLITE_DBCONFIG_ENABLE_TRIGGER and SQLITE_DBCONFIG_ENABLE_VIEW
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+
Query planner/optimizer improvements:
+
+
Enhancements to the min/max optimization so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+
Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+
Allow UNION ALL sub-queries to be flattened even if the parent query is a join.
+
Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+
Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+
Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+
Allow WHERE terms to be pushed down into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+
Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+
Add the ".filectrl data_version" command.
+
Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+
+
Bug fixes:
+
+
Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+
Use less memory when running VACUUM on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+
Add support for the MATERIALIZED and NOT MATERIALIZED hints when
+ specifying common table expressions. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+
The SQLITE_DBCONFIG_ENABLE_TRIGGER and SQLITE_DBCONFIG_ENABLE_VIEW
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+
Query planner/optimizer improvements:
+
+
Enhancements to the min/max optimization so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+
Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+
Allow UNION ALL sub-queries to be flattened even if the parent query is a join.
+
Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+
Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+
Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+
Allow WHERE terms to be pushed down into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+
Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+
Add the ".filectrl data_version" command.
+
Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+
+
Bug fixes:
+
+
Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+
Use less memory when running VACUUM on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+
Add support for the MATERIALIZED and NOT MATERIALIZED hints when
+ specifying common table expressions. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+
The SQLITE_DBCONFIG_ENABLE_TRIGGER and SQLITE_DBCONFIG_ENABLE_VIEW
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+
Query planner/optimizer improvements:
+
+
Enhancements to the min/max optimization so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+
Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+
Allow UNION ALL sub-queries to be flattened even if the parent query is a join.
+
Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+
Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+
Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+
Allow WHERE terms to be pushed down into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+
Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+
Add the ".filectrl data_version" command.
+
Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+
+
Bug fixes:
+
+
Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+
Fix incorrect answers from the LIKE operator if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+
+
+
Additional changes in version 3.35.1 (2021-03-15):
+
+
Fix a bug in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+
Improve the built-in documentation for the .dump command in the CLI.
+
+
Additional changes in version 3.35.2 (2021-03-17):
+
+
Fix a problem in the
+ appendvfs.c
+ extension that was introduced into version 3.35.0.
+
Ensure that date/time functions with no arguments (which generate
+ responses that depend on the current time) are treated as
+ non-deterministic functions. Ticket
+ 2c6c8689fb5f3d2f
+
Fix a problem in the sqldiff utility program having to do with
+ unusual whitespace characters in a virtual table definition.
+
Limit the new UNION ALL optimization described by item 8c in the
+ 3.35.0 release so that it does not try to make too many new subqueries.
+ See forum thread 140a67d3d2
+ for details.
+
Use less memory when running VACUUM on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+
Add support for the MATERIALIZED and NOT MATERIALIZED hints when
+ specifying common table expressions. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+
The SQLITE_DBCONFIG_ENABLE_TRIGGER and SQLITE_DBCONFIG_ENABLE_VIEW
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+
Query planner/optimizer improvements:
+
+
Enhancements to the min/max optimization so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+
Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+
Allow UNION ALL sub-queries to be flattened even if the parent query is a join.
+
Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+
Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+
Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+
Allow WHERE terms to be pushed down into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+
Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+
Add the ".filectrl data_version" command.
+
Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+
+
Bug fixes:
+
+
Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+
Fix incorrect answers from the LIKE operator if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+
+
+
Additional changes in version 3.35.1 (2021-03-15):
+
+
Fix a bug in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+
Improve the built-in documentation for the .dump command in the CLI.
+
+
Additional changes in version 3.35.2 (2021-03-17):
+
+
Fix a problem in the
+ appendvfs.c
+ extension that was introduced into version 3.35.0.
+
Ensure that date/time functions with no arguments (which generate
+ responses that depend on the current time) are treated as
+ non-deterministic functions. Ticket
+ 2c6c8689fb5f3d2f
+
Fix a problem in the sqldiff utility program having to do with
+ unusual whitespace characters in a virtual table definition.
+
Limit the new UNION ALL optimization described by item 8c in the
+ 3.35.0 release so that it does not try to make too many new subqueries.
+ See forum thread 140a67d3d2
+ for details.
+
+
Additional changes in version 3.35.3 (2021-03-26):
+
+
Enhance the OP_OpenDup opcode of the bytecode engine so that it works even if the
+ cursor being duplicated itself came from OP_OpenDup. Fix for
+ ticket bb8a9fd4a9b7fce5.
+ This problem only came to light due to the recent MATERIALIZED hint enhancement.
+
When materializing correlated common table expressions, do so separately for each
+ use case, as that is required for correctness. This fixes a problem that was
+ introduced by the MATERIALIZED hint enhancement.
+
Fix a problem in the filename normalizer of the unix VFS.
+
Fix the EBCDIC character classifier so that it understands newlines as whitespace.
+ Forum post 58540ce22dcd.
+
Improvements the xBestIndex method in the implementation of the
+ (unsupported) wholenumber virtual table
+ extension so that it does a better job of convincing the query planner to
+ avoid trying to materialize a table with an infinite number of rows.
+ Forum post b52a020ce4.
+
Use less memory when running VACUUM on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+
Add support for the MATERIALIZED and NOT MATERIALIZED hints when
+ specifying common table expressions. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+
The SQLITE_DBCONFIG_ENABLE_TRIGGER and SQLITE_DBCONFIG_ENABLE_VIEW
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+
Query planner/optimizer improvements:
+
+
Enhancements to the min/max optimization so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+
Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+
Allow UNION ALL sub-queries to be flattened even if the parent query is a join.
+
Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+
Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+
Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+
Allow WHERE terms to be pushed down into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+
Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+
Add the ".filectrl data_version" command.
+
Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+
+
Bug fixes:
+
+
Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+
Fix incorrect answers from the LIKE operator if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+
+
+
Additional changes in version 3.35.1 (2021-03-15):
+
+
Fix a bug in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+
Improve the built-in documentation for the .dump command in the CLI.
+
+
Additional changes in version 3.35.2 (2021-03-17):
+
+
Fix a problem in the
+ appendvfs.c
+ extension that was introduced into version 3.35.0.
+
Ensure that date/time functions with no arguments (which generate
+ responses that depend on the current time) are treated as
+ non-deterministic functions. Ticket
+ 2c6c8689fb5f3d2f
+
Fix a problem in the sqldiff utility program having to do with
+ unusual whitespace characters in a virtual table definition.
+
Limit the new UNION ALL optimization described by item 8c in the
+ 3.35.0 release so that it does not try to make too many new subqueries.
+ See forum thread 140a67d3d2
+ for details.
+
+
Additional changes in version 3.35.3 (2021-03-26):
+
+
Enhance the OP_OpenDup opcode of the bytecode engine so that it works even if the
+ cursor being duplicated itself came from OP_OpenDup. Fix for
+ ticket bb8a9fd4a9b7fce5.
+ This problem only came to light due to the recent MATERIALIZED hint enhancement.
+
When materializing correlated common table expressions, do so separately for each
+ use case, as that is required for correctness. This fixes a problem that was
+ introduced by the MATERIALIZED hint enhancement.
+
Fix a problem in the filename normalizer of the unix VFS.
+
Fix the EBCDIC character classifier so that it understands newlines as whitespace.
+ Forum post 58540ce22dcd.
+
Improvements the xBestIndex method in the implementation of the
+ (unsupported) wholenumber virtual table
+ extension so that it does a better job of convincing the query planner to
+ avoid trying to materialize a table with an infinite number of rows.
+ Forum post b52a020ce4.
+
+
Additional changes in version 3.35.4 (2021-04-02):
+
+
Fix a defect in the query planner optimization identified by
+ item 8b above. Ticket
+ de7db14784a08053.
+
Fix the new RETURNING feature so that it raises an error if one of
+ the terms in the RETURNING clause references a unknown table, instead
+ of silently ignoring that error.
+
Fix an assertion associated with aggregate function processing that
+ was incorrectly triggered by the push-down optimization.
+
Use less memory when running VACUUM on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+
Add support for the MATERIALIZED and NOT MATERIALIZED hints when
+ specifying common table expressions. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+
The SQLITE_DBCONFIG_ENABLE_TRIGGER and SQLITE_DBCONFIG_ENABLE_VIEW
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+
Query planner/optimizer improvements:
+
+
Enhancements to the min/max optimization so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+
Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+
Allow UNION ALL sub-queries to be flattened even if the parent query is a join.
+
Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+
Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+
Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+
Allow WHERE terms to be pushed down into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+
Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+
Add the ".filectrl data_version" command.
+
Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+
+
Bug fixes:
+
+
Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+
Fix incorrect answers from the LIKE operator if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+
+
+
Additional changes in version 3.35.1 (2021-03-15):
+
+
Fix a bug in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+
Improve the built-in documentation for the .dump command in the CLI.
+
+
Additional changes in version 3.35.2 (2021-03-17):
+
+
Fix a problem in the
+ appendvfs.c
+ extension that was introduced into version 3.35.0.
+
Ensure that date/time functions with no arguments (which generate
+ responses that depend on the current time) are treated as
+ non-deterministic functions. Ticket
+ 2c6c8689fb5f3d2f
+
Fix a problem in the sqldiff utility program having to do with
+ unusual whitespace characters in a virtual table definition.
+
Limit the new UNION ALL optimization described by item 8c in the
+ 3.35.0 release so that it does not try to make too many new subqueries.
+ See forum thread 140a67d3d2
+ for details.
+
+
Additional changes in version 3.35.3 (2021-03-26):
+
+
Enhance the OP_OpenDup opcode of the bytecode engine so that it works even if the
+ cursor being duplicated itself came from OP_OpenDup. Fix for
+ ticket bb8a9fd4a9b7fce5.
+ This problem only came to light due to the recent MATERIALIZED hint enhancement.
+
When materializing correlated common table expressions, do so separately for each
+ use case, as that is required for correctness. This fixes a problem that was
+ introduced by the MATERIALIZED hint enhancement.
+
Fix a problem in the filename normalizer of the unix VFS.
+
Fix the EBCDIC character classifier so that it understands newlines as whitespace.
+ Forum post 58540ce22dcd.
+
Improvements the xBestIndex method in the implementation of the
+ (unsupported) wholenumber virtual table
+ extension so that it does a better job of convincing the query planner to
+ avoid trying to materialize a table with an infinite number of rows.
+ Forum post b52a020ce4.
+
+
Additional changes in version 3.35.4 (2021-04-02):
+
+
Fix a defect in the query planner optimization identified by
+ item 8b above. Ticket
+ de7db14784a08053.
+
Fix the new RETURNING feature so that it raises an error if one of
+ the terms in the RETURNING clause references a unknown table, instead
+ of silently ignoring that error.
+
Fix an assertion associated with aggregate function processing that
+ was incorrectly triggered by the push-down optimization.
+
+
Additional changes in version 3.35.5 (2021-04-19):
+
+
Fix defects in the new ALTER TABLE DROP COLUMN feature that could
+ corrupt the database file.
+
Fix an obscure query optimizer problem that might cause an incorrect
+ query result.
+
Improvement to the EXPLAIN QUERY PLAN output to make it easier to
+ understand.
+
Byte-order marks at the start of a token are skipped as if they
+ were whitespace.
+
An error is raised on any attempt to access the rowid of a VIEW or subquery.
+ Formerly, the rowid of a VIEW would be indeterminate and often would be NULL.
+ The -DSQLITE_ALLOW_ROWID_IN_VIEW compile-time option is available to restore
+ the legacy behavior for applications that need it.
+
The sqlite3_deserialize() and sqlite3_serialize() interfaces are now
+ enabled by default. The -DSQLITE_ENABLE_DESERIALIZE compile-time option is
+ no longer required. Instead, there is a new -DSQLITE_OMIT_DESERIALIZE
+ compile-time option to omit those interfaces.
+
The "memdb" VFS now allows the same in-memory database to be shared among
+ multiple database connections in the same process as long as the
+ database name begins with "/".
+
Back out the EXISTS-to-IN optimization (item 8b in the
+ SQLite 3.35.0 change log)
+ as it was found to slow down queries more often than speed them up.
+
Add the .connection command, allowing the CLI to keep multiple database
+ connections open at the same time.
+
Add the --safe command-line option that disables
+ dot-commands and SQL statements that might cause side-effects that extend
+ beyond the single database file named on the command-line.
+
Performance improvements when reading SQL statements
+ that span many lines.
+
The sqlite3_deserialize() does not and has never worked for the TEMP
+ database. That limitation is now noted in the documentation.
+
The query planner now omits ORDER BY clauses on subqueries and views
+ if removing those clauses does not change the semantics of the query.
+
The generate_series table-valued function extension is modified so that
+ the first parameter ("START") is now required. This is done as a way to
+ demonstrate how to write table-valued functions with required parameters.
+ The legacy behavior is available using the -DZERO_ARGUMENT_GENERATE_SERIES
+ compile-time option.
+
Add the .connection command, allowing the CLI to keep multiple database
+ connections open at the same time.
+
Add the --safe command-line option that disables
+ dot-commands and SQL statements that might cause side-effects that extend
+ beyond the single database file named on the command-line.
+
Performance improvements when reading SQL statements
+ that span many lines.
+
The sqlite3_deserialize() does not and has never worked for the TEMP
+ database. That limitation is now noted in the documentation.
+
The query planner now omits ORDER BY clauses on subqueries and views
+ if removing those clauses does not change the semantics of the query.
+
The generate_series table-valued function extension is modified so that
+ the first parameter ("START") is now required. This is done as a way to
+ demonstrate how to write table-valued functions with required parameters.
+ The legacy behavior is available using the -DZERO_ARGUMENT_GENERATE_SERIES
+ compile-time option.
+
Additional changes in version 3.37.1 (2021-12-30):
+
+
Fix a bug introduced by the UPSERT enhancements of version 3.35.0 that
+ can cause incorrect byte-code to be generated for some obscure but valid
+ SQL, possibly resulting in a NULL-pointer dereference.
+
Fix an OOB read that can occur in FTS5 when reading corrupt database files.
+
Improved robustness of the --safe option in the CLI.
+
Other minor fixes to assert() statements and test cases.
+
+
Add the .connection command, allowing the CLI to keep multiple database
+ connections open at the same time.
+
Add the --safe command-line option that disables
+ dot-commands and SQL statements that might cause side-effects that extend
+ beyond the single database file named on the command-line.
+
Performance improvements when reading SQL statements
+ that span many lines.
+
The sqlite3_deserialize() does not and has never worked for the TEMP
+ database. That limitation is now noted in the documentation.
+
The query planner now omits ORDER BY clauses on subqueries and views
+ if removing those clauses does not change the semantics of the query.
+
The generate_series table-valued function extension is modified so that
+ the first parameter ("START") is now required. This is done as a way to
+ demonstrate how to write table-valued functions with required parameters.
+ The legacy behavior is available using the -DZERO_ARGUMENT_GENERATE_SERIES
+ compile-time option.
+
Additional changes in version 3.37.1 (2021-12-30):
+
+
Fix a bug introduced by the UPSERT enhancements of version 3.35.0 that
+ can cause incorrect byte-code to be generated for some obscure but valid
+ SQL, possibly resulting in a NULL-pointer dereference.
+
Fix an OOB read that can occur in FTS5 when reading corrupt database files.
+
Improved robustness of the --safe option in the CLI.
+
Other minor fixes to assert() statements and test cases.
+
+
+
Additional changes in version 3.37.2 (2022-01-06):
Fix a long-standing problem with ON DELETE CASCADE and ON UPDATE CASCADE
+ in which a cache of the bytecode used to implement the cascading change
+ was not being reset following a local DDL change.
+ Check-in 5232c9777fe4fb13.
+
Other minor fixes that should not impact production builds.
+
+
Added the -> and ->> operators for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+
The JSON functions are now built-ins. It is no longer necessary
+ to use the -DSQLITE_ENABLE_JSON1 compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new -DSQLITE_OMIT_JSON compile-time option.
+
Rename the printf() SQL function to format() for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+
Added the sqlite3_error_offset() interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+
Enhanced the interface to virtual tables as follows:
+
+
Added the sqlite3_vtab_in() interface (and related) to enable
+ a virtual table to process IN operator constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+
Added the -> and ->> operators for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+
The JSON functions are now built-ins. It is no longer necessary
+ to use the -DSQLITE_ENABLE_JSON1 compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new -DSQLITE_OMIT_JSON compile-time option.
+
Rename the printf() SQL function to format() for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+
Added the sqlite3_error_offset() interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+
Enhanced the interface to virtual tables as follows:
+
+
Added the sqlite3_vtab_in() interface (and related) to enable
+ a virtual table to process IN operator constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+
Fix the sqlite_offset SQL function so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+
Fix row value IN operator constraints on virtual tables so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+
Other minor fixes to assert() statements, test cases, and documentation.
+ See the source code timeline
+ for details.
+
+
Added the -> and ->> operators for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+
The JSON functions are now built-ins. It is no longer necessary
+ to use the -DSQLITE_ENABLE_JSON1 compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new -DSQLITE_OMIT_JSON compile-time option.
+
Rename the printf() SQL function to format() for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+
Added the sqlite3_error_offset() interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+
Enhanced the interface to virtual tables as follows:
+
+
Added the sqlite3_vtab_in() interface (and related) to enable
+ a virtual table to process IN operator constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+
Fix the sqlite_offset SQL function so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+
Fix row value IN operator constraints on virtual tables so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+
Other minor fixes to assert() statements, test cases, and documentation.
+ See the source code timeline
+ for details.
+
+
+
Additional changes in version 3.38.2 (2022-03-26):
+
+
Fix a user-discovered problem with the new Bloom filter optimization
+ that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
+ clause constraint that says that one of the columns on the right table of
+ the LEFT JOIN is NULL. See
+ forum thread 031e262a89b6a9d2.
+
Other minor patches. See the
+ timeline for
+ details.
+
+
Added the -> and ->> operators for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+
The JSON functions are now built-ins. It is no longer necessary
+ to use the -DSQLITE_ENABLE_JSON1 compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new -DSQLITE_OMIT_JSON compile-time option.
+
Rename the printf() SQL function to format() for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+
Added the sqlite3_error_offset() interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+
Enhanced the interface to virtual tables as follows:
+
+
Added the sqlite3_vtab_in() interface (and related) to enable
+ a virtual table to process IN operator constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+
Fix the sqlite_offset SQL function so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+
Fix row value IN operator constraints on virtual tables so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+
Other minor fixes to assert() statements, test cases, and documentation.
+ See the source code timeline
+ for details.
+
+
+
Additional changes in version 3.38.2 (2022-03-26):
+
+
Fix a user-discovered problem with the new Bloom filter optimization
+ that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
+ clause constraint that says that one of the columns on the right table of
+ the LEFT JOIN is NULL. See
+ forum thread 031e262a89b6a9d2.
+
Other minor patches. See the
+ timeline for
+ details.
+
+
+
Additional changes in version 3.38.3 (2022-04-27):
+
+
Fix a case of the query planner be overly aggressive with optimizing automatic-index
+ and Bloom-filter construction, using inappropriate ON clause terms to restrict the
+ size of the automatic-index or Bloom filter, and resulting in missing rows in the
+ output.
+ Forum thread 0d3200f4f3bcd3a3.
+
Other minor patches. See the
+ timeline for
+ details.
+
+
Added the -> and ->> operators for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+
The JSON functions are now built-ins. It is no longer necessary
+ to use the -DSQLITE_ENABLE_JSON1 compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new -DSQLITE_OMIT_JSON compile-time option.
+
Rename the printf() SQL function to format() for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+
Added the sqlite3_error_offset() interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+
Enhanced the interface to virtual tables as follows:
+
+
Added the sqlite3_vtab_in() interface (and related) to enable
+ a virtual table to process IN operator constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+
Fix the sqlite_offset SQL function so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+
Fix row value IN operator constraints on virtual tables so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+
Other minor fixes to assert() statements, test cases, and documentation.
+ See the source code timeline
+ for details.
+
+
+
Additional changes in version 3.38.2 (2022-03-26):
+
+
Fix a user-discovered problem with the new Bloom filter optimization
+ that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
+ clause constraint that says that one of the columns on the right table of
+ the LEFT JOIN is NULL. See
+ forum thread 031e262a89b6a9d2.
+
Other minor patches. See the
+ timeline for
+ details.
+
+
+
Additional changes in version 3.38.3 (2022-04-27):
+
+
Fix a case of the query planner be overly aggressive with optimizing automatic-index
+ and Bloom-filter construction, using inappropriate ON clause terms to restrict the
+ size of the automatic-index or Bloom filter, and resulting in missing rows in the
+ output.
+ Forum thread 0d3200f4f3bcd3a3.
+
Other minor patches. See the
+ timeline for
+ details.
+
+
+
Additional changes in version 3.38.4 (2022-05-04):
+
+
Fix a byte-code problem in the Bloom filter pull-down optimization added by release
+ 3.38.0 in which an error in the byte code causes the byte code engine to enter an
+ infinite loop when the pull-down optimization encounters a NULL key.
+ Forum thread 2482b32700384a0f.
+
Other minor patches. See the
+ timeline for
+ details.
+
+
Added the -> and ->> operators for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+
The JSON functions are now built-ins. It is no longer necessary
+ to use the -DSQLITE_ENABLE_JSON1 compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new -DSQLITE_OMIT_JSON compile-time option.
+
Rename the printf() SQL function to format() for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+
Added the sqlite3_error_offset() interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+
Enhanced the interface to virtual tables as follows:
+
+
Added the sqlite3_vtab_in() interface (and related) to enable
+ a virtual table to process IN operator constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+
Fix the sqlite_offset SQL function so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+
Fix row value IN operator constraints on virtual tables so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+
Other minor fixes to assert() statements, test cases, and documentation.
+ See the source code timeline
+ for details.
+
+
+
Additional changes in version 3.38.2 (2022-03-26):
+
+
Fix a user-discovered problem with the new Bloom filter optimization
+ that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
+ clause constraint that says that one of the columns on the right table of
+ the LEFT JOIN is NULL. See
+ forum thread 031e262a89b6a9d2.
+
Other minor patches. See the
+ timeline for
+ details.
+
+
+
Additional changes in version 3.38.3 (2022-04-27):
+
+
Fix a case of the query planner be overly aggressive with optimizing automatic-index
+ and Bloom-filter construction, using inappropriate ON clause terms to restrict the
+ size of the automatic-index or Bloom filter, and resulting in missing rows in the
+ output.
+ Forum thread 0d3200f4f3bcd3a3.
+
Other minor patches. See the
+ timeline for
+ details.
+
+
+
Additional changes in version 3.38.4 (2022-05-04):
+
+
Fix a byte-code problem in the Bloom filter pull-down optimization added by release
+ 3.38.0 in which an error in the byte code causes the byte code engine to enter an
+ infinite loop when the pull-down optimization encounters a NULL key.
+ Forum thread 2482b32700384a0f.
+
Other minor patches. See the
+ timeline for
+ details.
+
+
+
Additional changes in version 3.38.5 (2022-05-06):
+
+
Fix a blunder in the CLI of the 3.38.4 release.
+
+
Add new binary comparison operators IS NOT DISTINCT FROM and IS DISTINCT FROM
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+
Add a new return code (value "3") from the sqlite3_vtab_distinct()
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+
The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the SQLITE_OPEN_NOFOLLOW flag is used with sqlite3_open_v2()
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+
Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+
Add new binary comparison operators IS NOT DISTINCT FROM and IS DISTINCT FROM
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+
Add a new return code (value "3") from the sqlite3_vtab_distinct()
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+
The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the SQLITE_OPEN_NOFOLLOW flag is used with sqlite3_open_v2()
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+
Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+
Additional changes in version 3.39.1 (2022-07-13):
+
+
Fix an incorrect result from a query that uses a view that contains a compound
+ SELECT in which only one arm contains a RIGHT JOIN and where the view is not
+ the first FROM clause term of the query that contains the view.
+ forum post 174afeae5734d42d.
+
Fix the build so that is works when the SQLITE_DEBUG and
+ SQLITE_OMIT_WINDOWFUNC compile-time options are both provided at the
+ same time.
+
Fix the initial-prefix optimization for the REGEXP extension so that it works
+ correctly even if the prefix contains characters that require a 3-byte UTF8
+ encoding.
+
Enhance the sqlite_stmt virtual table so that it buffers all of its output.
+
Add new binary comparison operators IS NOT DISTINCT FROM and IS DISTINCT FROM
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+
Add a new return code (value "3") from the sqlite3_vtab_distinct()
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+
The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the SQLITE_OPEN_NOFOLLOW flag is used with sqlite3_open_v2()
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+
Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+
Additional changes in version 3.39.1 (2022-07-13):
+
+
Fix an incorrect result from a query that uses a view that contains a compound
+ SELECT in which only one arm contains a RIGHT JOIN and where the view is not
+ the first FROM clause term of the query that contains the view.
+ forum post 174afeae5734d42d.
+
Fix the build so that is works when the SQLITE_DEBUG and
+ SQLITE_OMIT_WINDOWFUNC compile-time options are both provided at the
+ same time.
+
Fix the initial-prefix optimization for the REGEXP extension so that it works
+ correctly even if the prefix contains characters that require a 3-byte UTF8
+ encoding.
+
Enhance the sqlite_stmt virtual table so that it buffers all of its output.
+
+
Additional changes in version 3.39.2 (2022-07-21):
+
+
Fix a performance regression in the query planner associated with rearranging
+ the order of FROM clause terms in the presences of a LEFT JOIN.
+
Apply fixes for CVE-2022-35737, Chromium bugs 1343348 and 1345947,
+ forum post 3607259d3c, and
+ other minor problems discovered by internal testing.
+
Add new binary comparison operators IS NOT DISTINCT FROM and IS DISTINCT FROM
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+
Add a new return code (value "3") from the sqlite3_vtab_distinct()
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+
The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the SQLITE_OPEN_NOFOLLOW flag is used with sqlite3_open_v2()
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+
Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+
Additional changes in version 3.39.1 (2022-07-13):
+
+
Fix an incorrect result from a query that uses a view that contains a compound
+ SELECT in which only one arm contains a RIGHT JOIN and where the view is not
+ the first FROM clause term of the query that contains the view.
+ forum post 174afeae5734d42d.
+
Fix the build so that is works when the SQLITE_DEBUG and
+ SQLITE_OMIT_WINDOWFUNC compile-time options are both provided at the
+ same time.
+
Fix the initial-prefix optimization for the REGEXP extension so that it works
+ correctly even if the prefix contains characters that require a 3-byte UTF8
+ encoding.
+
Enhance the sqlite_stmt virtual table so that it buffers all of its output.
+
+
Additional changes in version 3.39.2 (2022-07-21):
+
+
Fix a performance regression in the query planner associated with rearranging
+ the order of FROM clause terms in the presences of a LEFT JOIN.
+
Apply fixes for CVE-2022-35737, Chromium bugs 1343348 and 1345947,
+ forum post 3607259d3c, and
+ other minor problems discovered by internal testing.
+
+
Additional changes in version 3.39.3 (2022-09-05):
+
+
Use a statement journal on DML statement affecting two or more database
+ rows if the statement makes use of a SQL functions that might abort. See
+ forum thread 9b9e4716c0d7bbd1.
+
Add new binary comparison operators IS NOT DISTINCT FROM and IS DISTINCT FROM
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+
Add a new return code (value "3") from the sqlite3_vtab_distinct()
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+
The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the SQLITE_OPEN_NOFOLLOW flag is used with sqlite3_open_v2()
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+
Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+
Additional changes in version 3.39.1 (2022-07-13):
+
+
Fix an incorrect result from a query that uses a view that contains a compound
+ SELECT in which only one arm contains a RIGHT JOIN and where the view is not
+ the first FROM clause term of the query that contains the view.
+ forum post 174afeae5734d42d.
+
Fix the build so that is works when the SQLITE_DEBUG and
+ SQLITE_OMIT_WINDOWFUNC compile-time options are both provided at the
+ same time.
+
Fix the initial-prefix optimization for the REGEXP extension so that it works
+ correctly even if the prefix contains characters that require a 3-byte UTF8
+ encoding.
+
Enhance the sqlite_stmt virtual table so that it buffers all of its output.
+
+
Additional changes in version 3.39.2 (2022-07-21):
+
+
Fix a performance regression in the query planner associated with rearranging
+ the order of FROM clause terms in the presences of a LEFT JOIN.
+
Apply fixes for CVE-2022-35737, Chromium bugs 1343348 and 1345947,
+ forum post 3607259d3c, and
+ other minor problems discovered by internal testing.
+
+
Additional changes in version 3.39.3 (2022-09-05):
+
+
Use a statement journal on DML statement affecting two or more database
+ rows if the statement makes use of a SQL functions that might abort. See
+ forum thread 9b9e4716c0d7bbd1.
+
Other bug and warning fixes. See the
+ timeline
+ for details.
+
+
Additional changes in version 3.39.4 (2022-09-29):
+
+
Fix the build on Windows so that it works with -DSQLITE_OMIT_AUTOINIT
+
Fix a long-standing problem in the btree balancer that might, in rare cases,
+ cause database corruption if the application uses an
+ application-defined page cache.
+
Added a virtual function layer for the OS interface
+
"exists" method added to the TCL interface
+
Improved response to out-of-memory errors
+
Database cache can be optionally shared between connections
+in the same thread
+
Optional READ UNCOMMITTED isolation (instead of the default
+isolation level of SERIALIZABLE) and table level locking when
+database connections share a common cache.
Fix another bug in the implementation of the new
+sqlite3_prepare_v2() API.
+We'll get it right eventually...
+
Fix a bug in the IS NULL optimization that was added in version 3.3.9 -
+the bug was causing incorrect results on certain LEFT JOINs that included
+in the WHERE clause an IS NULL constraint for the right table of the
+LEFT JOIN.
+
Make AreFileApisANSI() a no-op macro in WinCE since WinCE does not
+support this function.
Add a "fragmentation" measurement in the output of sqlite3_analyzer.
+
Add the COLLATE operator used to explicitly set the collating sequence
+used by an expression. This feature is considered experimental pending
+additional testing.
+
Allow up to 64 tables in a join - the old limit was 32.
+
Added two new experimental functions:
+randomBlob() and
+hex().
+Their intended use is to facilitate generating
+UUIDs.
+
+
Fix a problem where
+PRAGMA count_changes was
+causing incorrect results for updates on tables with triggers
+
Fix a bug in the ORDER BY clause optimizer for joins where the
+left-most table in the join is constrained by a UNIQUE index.
+
Fixed a bug in the "copy" method of the TCL interface.
Fix a bug (ticket #2273)
+ that could cause a segfault when the IN operator
+ is used one term of a two-column index and the right-hand side of
+ the IN operator contains a NULL.
+
Added a new OS interface method for determining the sector size
+ of underlying media: sqlite3OsSectorSize().
+
A new algorithm for statements of the form
+ INSERT INTO table1 SELECT * FROM table2
+ is faster and reduces fragmentation. VACUUM uses statements of
+ this form and thus runs faster and defragments better.
+
Performance enhancements through reductions in disk I/O:
+
+
Do not read the last page of an overflow chain when
+ deleting the row - just add that page to the freelist.
+
Do not store pages being deleted in the
+ rollback journal.
+
Do not read in the (meaningless) content of
+ pages extracted from the freelist.
+
Do not flush the page cache (and thus avoiding
+ a cache refill) unless another process changes the underlying
+ database file.
+
Truncate rather than delete the rollback journal when committing
+ a transaction in exclusive access mode, or when committing the TEMP
+ database.
When the "write_version" value of the database header is larger than
+ what the library understands, make the database read-only instead of
+ unreadable.
Removed support for an ON CONFLICT clause on CREATE INDEX - it never
+worked correctly so this should not present any backward compatibility
+problems.
+
Authorizer callback now notified of ALTER TABLE ADD COLUMN commands
+
After any changes to the TEMP database schema, all prepared statements
+are invalidated and must be recreated using a new call to
+sqlite3_prepare()
+
Other minor bug fixes in preparation for the first stable release
+of version 3.3
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.
+
Add the recovery extension that might be able to recover some content
+ from a corrupt database file.
+
Query planner enhancements:
+
+
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.
+
Extract the values of expressions contained within expression indexes
+ where practical, rather than recomputing the expression.
+
The NOT NULL and IS NULL operators (and their equivalents) avoid
+ loading the content of large strings and BLOB values from disk.
+
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.
+
Allow flattening of a subquery that is the right-hand operand of
+ a LEFT JOIN in an aggregate query.
+
+
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.
+
Security enhancement: SQLITE_DBCONFIG_DEFENSIVE is augmented to prohibit
+ changing the schema_version. The schema_version
+ becomes read-only in defensive mode.
+
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.
+
Provide the new SQLITE_MAX_ALLOCATION_SIZE compile-time option for limiting
+ the size of memory allocations.
+
Change the algorithm used by SQLite's built-in pseudo-random number generator (PRNG)
+ from RC4 to Chacha20.
+
Allow two or more indexes to have the same name as long as they are all in
+ separate schemas.
+
Miscellaneous performance optimizations result in about 1% fewer CPU cycles
+ used on typical workloads.
+
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.
+
Add the recovery extension that might be able to recover some content
+ from a corrupt database file.
+
Query planner enhancements:
+
+
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.
+
Extract the values of expressions contained within expression indexes
+ where practical, rather than recomputing the expression.
+
The NOT NULL and IS NULL operators (and their equivalents) avoid
+ loading the content of large strings and BLOB values from disk.
+
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.
+
Allow flattening of a subquery that is the right-hand operand of
+ a LEFT JOIN in an aggregate query.
+
+
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.
+
Security enhancement: SQLITE_DBCONFIG_DEFENSIVE is augmented to prohibit
+ changing the schema_version. The schema_version
+ becomes read-only in defensive mode.
+
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.
+
Provide the new SQLITE_MAX_ALLOCATION_SIZE compile-time option for limiting
+ the size of memory allocations.
+
Change the algorithm used by SQLite's built-in pseudo-random number generator (PRNG)
+ from RC4 to Chacha20.
+
Allow two or more indexes to have the same name as long as they are all in
+ separate schemas.
+
Miscellaneous performance optimizations result in about 1% fewer CPU cycles
+ used on typical workloads.
+
+
Additional changes in version 3.40.1 (2022-12-28):
+
+
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.
+
Fix a potential infinite loop in the memsys5 alternative memory allocator. This
+ bug was introduced by a performance optimization in version 3.39.0.
+
Fix a bug that can lead to database corruption if an SQLITE_BUSY error
+ occurs in the middle of an explicit transaction and that transaction
+ is later committed. Ticket #2409.
+
Fix a bug that can lead to database corruption if autovacuum mode is
+ on and a malloc() failure follows a CREATE TABLE or CREATE INDEX statement
+ which itself follows a cache overflow inside a transaction. See
+ ticket #2418.
+
+
Added explicit upper bounds on the sizes and
+ quantities of things SQLite can process. This change might cause
+ compatibility problems for
+ applications that use SQLite in the extreme, which is why the current
+ release is 3.4.0 instead of 3.3.18.
Fix a bug in VACUUM that can lead to
+ database corruptio if two
+ processes are connected to the database at the same time and one
+ VACUUMs then the other then modifies the database.
+
The expression "+column" is now considered the same as "column"
+ when computing the collating sequence to use on the expression.
+
In the TCL language interface,
+ "@variable" instead of "$variable" always binds as a blob.
Fix a database corruption bug that might occur if a ROLLBACK command
+is executed in auto-vacuum mode
+and a very small sqlite3_soft_heap_limit is set.
+Ticket #2565.
+
+
Nota Bene: We are not using terms "alpha" or "beta" on this
+ release because the code is stable and because if we use those terms,
+ nobody will upgrade. However, we still reserve the right to make
+ incompatible changes to the new VFS interface in future releases.
+
+
Fix a bug in the handling of SQLITE_FULL errors that could lead
+ to database corruption. Ticket #2686.
+
The test_async.c drive now does full file locking and works correctly
+ when used simultaneously by multiple processes on the same database.
+
The CLI ignores whitespace (including comments) at the end of lines
+
Make sure the query optimizer checks dependencies on all terms of
+ a compound SELECT statement. Ticket #2640.
+
Add demonstration code showing how to build a VFS for a raw
+ mass storage without a filesystem.
+
Added an output buffer size parameter to the xGetTempname() method
+ of the VFS layer.
+
Sticky SQLITE_FULL or SQLITE_IOERR errors in the pager are reset
+ when a new transaction is started.
+
+
FTS3 now uses the SQLite memory allocator exclusively. The
+FTS3 amalgamation can now be appended to the SQLite amalgamation to
+generate a super-amalgamation containing both.
+
The DISTINCT keyword now will sometimes use an INDEX if an
+appropriate index is available and the optimizer thinks its use
+might be advantageous.
+
+
Fix a critical bug in UPDATE or DELETE that occurs when an
+OR REPLACE clause or a trigger causes rows in the same table to
+be deleted as side effects. (See ticket #2832.) The most likely
+result of this bug is a segmentation fault, though database
+corruption is a possibility.
+
Bring the processing of ORDER BY into compliance with the
+SQL standard for case where a result alias and a table column name
+are in conflict. Correct behavior is to prefer the result alias.
+Older versions of SQLite incorrectly picked the table column.
+(See ticket #2822.)
Productize and officially support the group_concat() SQL function.
+
Better optimization of some IN operator expressions.
+
Add the ability to change the
+auto_vacuum status of a
+database by setting the auto_vaccum pragma and VACUUMing the database.
+
Prefix search in FTS3 is much more efficient.
+
Relax the SQL statement length restriction in the CLI so that
+the ".dump" output of databases with very large BLOBs and strings can
+be played back to recreate the database.
Convert the underlying virtual machine to be a register-based machine
+rather than a stack-based machine. The only user-visible change
+is in the output of EXPLAIN.
Fix a bug (ticket #2913)
+that prevented virtual tables from working in a LEFT JOIN.
+The problem was introduced into shortly before the 3.5.5 release.
Fix a bug (ticket #2927) in the register allocation for
+compound selects - introduced by the new VM code in version 3.5.5.
+
ALTER TABLE uses double-quotes instead of single-quotes for quoting
+filenames.
+
Use the WHERE clause to reduce the size of a materialized VIEW in
+an UPDATE or DELETE statement. (Optimization)
+
Do not apply the flattening optimization if the outer query is an
+aggregate and the inner query contains ORDER BY. (Ticket #2943)
+
Additional OS/2 updates
+
Added an experimental power-of-two, first-fit memory allocator.
+
Remove all instances of sprintf() from the code
+
Accept "Z" as the zulu timezone at the end of date strings
+
Fix a bug in the LIKE optimizer that occurs when the last character
+before the first wildcard is an upper-case "Z"
+
Added the "bitvec" object for keeping track of which pages have
+been journalled. Improves speed and reduces memory consumption, especially
+for large database files.
+
Get the SQLITE_ENABLE_LOCKING_STYLE macro working again on Mac OS X.
+
Store the statement journal in the temporary file directory instead of
+collocated with the database file.
+
Many improvements and cleanups to the configure script
New interface sqlite3_limit() allows size and length limits to be
+ set on a per-connection basis and at run-time.
+
Improved crash-robustness: write the database page size into the rollback
+ journal header.
+
Allow the VACUUM command to change the page size of a database file.
+
The xAccess() method of the VFS is allowed to return -1 to signal
+ a memory allocation error.
+
Performance improvement: The OP_IdxDelete opcode uses unpacked records,
+ obviating the need for one OP_MakeRecord opcode call for each index
+ record deleted.
+
Performance improvement: Constant subexpressions are factored out of
+ loops.
+
Performance improvement: Results of OP_Column are reused rather than
+ issuing multiple OP_Column opcodes.
+
Fix a bug in the RTRIM collating sequence.
+
Fix a bug in the SQLITE_SECURE_DELETE option that was causing
+ Firefox crashes. Make arrangements to always test SQLITE_SECURE_DELETE
+ prior to each release.
Fix a performance regression on LEFT JOIN (see ticket #3015)
+ that was mistakenly introduced in version 3.5.8.
+
Performance enhancement: Reengineer the internal routines used
+ to interpret and render variable-length integers.
+
Fix a buffer-overrun problem in sqlite3_mprintf() which occurs
+ when a string without a zero-terminator is passed to "%.*s".
+
Always convert IEEE floating point NaN values into NULL during
+ processing. (Ticket #3060)
+
Make sure that when a connection blocks on a RESERVED lock that
+ it is able to continue after the lock is released. (Ticket #3093)
+
The "configure" scripts should now automatically configure Unix
+ systems for large file support. Improved error messages for
+ when large files are encountered and large file support is disabled.
+
Avoid cache pages leaks following disk-full or I/O errors
+
And, many more minor bug fixes and performance enhancements....
Modifications to the virtual file system interface
+ to support a wider range of embedded systems.
+ See 35to36.html for additional information.
+ *** Potentially incompatible change ***
+
All C-preprocessor macros used to control compile-time options
+ now begin with the prefix "SQLITE_". This may require changes to
+ applications that compile SQLite using their own makefiles and with
+ custom compile-time options, hence we mark this as a
+ *** Potentially incompatible change ***
+
The SQLITE_MUTEX_APPDEF compile-time option is no longer supported.
+ Alternative mutex implementations can now be added at run-time using
+ the sqlite3_config() interface with the SQLITE_CONFIG_MUTEX verb.
+ *** Potentially incompatible change ***
+
The handling of IN and NOT IN operators that contain a NULL on their
+ right-hand side expression is brought into compliance with the SQL
+ standard and with other SQL database engines. This is a bug fix,
+ but as it has the potential to break legacy applications that depend
+ on the older buggy behavior, we mark that as a
+ *** Potentially incompatible change ***
+
The result column names generated for compound subqueries have been
+ simplified to show only the name of the column of the original table and
+ omit the table name. This makes SQLite operate more like other SQL
+ database engines.
+
Added the sqlite3_config() interface for doing run-time configuration
+ of the entire SQLite library.
+
Added the sqlite3_status() interface used for querying run-time status
+ information about the overall SQLite library and its subsystems.
Fix a bug in version 3.6.12 that causes a segfault when running
+ a count(*) on the sqlite_master table of an empty database. Ticket #3774.
+
Fix a bug in version 3.6.12 that causes a segfault that when
+ inserting into a table using a DEFAULT value where there is a
+ function as part of the DEFAULT value expression. Ticket #3791.
+
Fix data structure alignment issues on Sparc. Ticket #3777.
+
Enhanced the query optimizer so that virtual tables are able to
+ make use of OR and IN operators in the WHERE clause.
+
Speed improvements in the btree and pager layers.
+
Added the SQLITE_HAVE_ISNAN compile-time option which will cause
+ the isnan() function from the standard math library to be used instead
+ of SQLite's own home-brew NaN checker.
+
Countless minor bug fixes, documentation improvements, new and
+ improved test cases, and code simplifications and cleanups.
+
+
When new tables are created using CREATE TABLE ... AS SELECT ... the
+ datatype of the columns is the simplified SQLite datatype (TEXT, INT,
+ REAL, NUMERIC, or BLOB) instead of a copy of the original datatype from
+ the source table.
+
Resolve race conditions when checking for a hot rollback journal.
+
Versioning of the SQLite source code has transitioned from CVS to
+ Fossil.
+
Query planner enhancements.
+
The SQLITE_ENABLE_STAT2 compile-time option causes the ANALYZE
+ command to collect a small histogram of each index, to help SQLite better
+ select among competing range query indices.
+
Delete triggers fire when rows are removed due to a
+ REPLACE conflict resolution. This feature is only
+ enabled when recursive triggers are enabled.
+
Optimizer enhancement: prepared statements are automatically
+re-compiled when a binding on the RHS of a LIKE operator changes or
+when any range constraint changes under SQLITE_ENABLE_STAT2.
+
Various minor bug fixes and documentation enhancements.
+
+
Performance optimizations targeting a specific use case from
+a single high-profile user of SQLite. A 12% reduction in the number of
+CPU operations is achieved (as measured by Valgrind). Actual performance
+improvements in practice may vary depending on workload. Changes
+include:
+
+
The ifnull() and coalesce() SQL functions are now implemented
+ using in-line VDBE code rather than calling external functions, so that
+ unused arguments need never be evaluated.
+
The substr() SQL function does not bother to measure the length
+ its entire input string if it is only computing a prefix
+
Unnecessary OP_IsNull, OP_Affinity, and OP_MustBeInt VDBE opcodes
+ are suppressed
+
Various code refactorizations for performance
+
+
The FTS3 extension has undergone a major rework and cleanup.
+New FTS3 documentation is now available.
+
Fix a missing "sync" that when omitted could lead to database
+ corruption if a power failure or OS crash occurred just as a
+ ROLLBACK operation was finishing.
+
+
The COMMIT command now succeeds even if there are pending queries.
+ It returns SQLITE_BUSY if there are pending incremental BLOB I/O requests.
+
The error code is changed to SQLITE_BUSY (instead of SQLITE_ERROR)
+ when an attempt is made to ROLLBACK while one or more queries are
+ still pending.
Fix a bug in the b-tree delete algorithm that seems like it might be
+ able to cause database corruption. The bug was first introduced in
+ version 3.6.6 by check-in [5899] on 2008-11-13.
+
Fix a memory leak that can occur following a disk I/O error.
Changed the prototype of the sqlite3_auto_extension() interface in a
+ way that is backwards compatible but which might cause warnings in new
+ builds of applications that use that interface.
+
Changed the signature of the xDlSym method of the sqlite3_vfs object
+ in a way that is backwards compatible but which might cause
+ compiler warnings.
+
Added superfluous casts and variable initializations in order
+ to suppress nuisance compiler warnings.
Fix two bugs, which when combined might result in incorrect
+ query results. Both bugs were harmless by themselves; only when
+ they team up do they cause problems. Ticket #3581.
+
+
The logical database size is now stored in the database header so that
+ bytes can be appended to the end of the database file without corrupting
+ it and so that SQLite will work correctly on systems that lack support
+ for ftruncate().
+
+
Fix a potential database corruption bug that can occur if version 3.7.0
+ and version 3.6.23.1 alternately write to the same database file.
+
+ Ticket [51ae9cad317a1]
+
Fix a performance regression related to the query planner enhancements
+ of version 3.7.0.
+
+
Increase the maximum size of a database pages from 32KiB to 64KiB.
+
Use the LIKE optimization even if the right-hand side string contains
+ no wildcards.
+
Added the SQLITE_FCNTL_CHUNK_SIZE verb to the sqlite3_file_control()
+ interface for both unix and windows, to cause database files to grow in
+ large chunks in order to reduce disk fragmentation.
+
Fixed a bug in the query planner that caused performance regressions
+ relative to 3.6.23.1 on some complex joins.
+
Fixed a typo in the OS/2 backend.
+
Refactored the pager module.
+
The SQLITE_MAX_PAGE_SIZE compile-time option is now silently ignored.
+ The maximum page size is hard-coded at 65536 bytes.
+
+
The default schema format number is changed from 1 to 4.
+ This means that, unless
+ the PRAGMA legacy_file_format=ON statement is
+ run, newly created database files will be unreadable by version of SQLite
+ prior to 3.3.0 (2006-01-10). It also means that the descending indices
+ are enabled by default.
+
If the argument to PRAGMA cache_size is negative N, that means to use
+ approximately -1024*N bytes of memory for the page cache regardless of
+ the page size.
+
Enhanced the default memory allocator to make use of _msize() on windows,
+ malloc_size() on Mac, and malloc_usable_size() on Linux.
+
Enhanced the query planner to support index queries with range constraints
+ on the rowid.
+
Enhanced the query planner flattening logic to allow UNION ALL compounds
+ to be promoted upwards to replace a simple wrapper SELECT even if the
+ compounds are joins.
+
Enhanced the query planner so that the xfer optimization can be used with
+ INTEGER PRIMARY KEY ON CONFLICT as long as the destination table is
+ initially empty.
+
Enhanced the windows VFS so that all system calls can be overridden
+ using the xSetSystemCall interface.
+
Updated the "unix-dotfile" VFS to use locking directories with mkdir()
+ and rmdir() instead of locking files with open() and unlink().
+
Enhancements to the test_quota.c extension to support stdio-like interfaces
+ with quotas.
+
Change the unix VFS to be tolerant of read() system calls that return
+ less then the full number of requested bytes.
+
Change both unix and windows VFSes to report a sector size of 4096
+ instead of the old default of 512.
+
In the TCL Interface, add the -uri option to the "sqlite3" TCL command
+ used for creating new database connection objects.
+
Bug fix:
+ Add an additional xSync when restarting a WAL in order to prevent an
+ exceedingly unlikely but theoretically possible
+ database corruption following power-loss.
+ Ticket ff5be73dee.
+
Bug fix:
+ Change the VDBE so that all registers are initialized to Invalid
+ instead of NULL.
+ Ticket 7bbfb7d442
+
Bug fix:
+ Fix problems that can result from 32-bit integer overflow.
+ Ticket ac00f496b7e2
+
Documented support for the FTS4 content option. This feature has
+ actually been in the code since version 3.7.9 but is only now considered
+ to be officially supported.
+
Pending statements no longer block ROLLBACK. Instead, the pending
+ statement will return SQLITE_ABORT upon next access after the ROLLBACK.
+
Fix a bug introduced
+ in version 3.7.10 that might cause a LEFT JOIN
+ to be incorrectly converted into an INNER JOIN if the WHERE clause
+ indexable terms connected by OR.
+
+
Enhance the PRAGMA integrity_check command to use much less memory when
+ processing multi-gigabyte databases.
+
New interfaces added to the test_quota.c add-on module.
+
Added the ".trace" dot-command to the command-line shell.
+
Allow virtual table constructors to be invoked recursively.
+
Improved optimization of ORDER BY clauses on compound queries.
+
Improved optimization of aggregate subqueries contained within an
+ aggregate query.
+
Bug fix: Fix the RELEASE command so that it does not cancel pending
+ queries. This repairs a problem introduced in 3.7.11.
+
Bug fix: Do not discard the DISTINCT as superfluous unless a subset of
+ the result set is subject to a UNIQUE constraint and it none
+ of the columns in that subset can be NULL.
+ Ticket 385a5b56b9.
+
Bug fix: Do not optimize away an ORDER BY clause that has the same terms
+ as a UNIQUE index unless those terms are also NOT NULL.
+ Ticket 2a5629202f.
+
In-memory databases that are specified using
+ URI filenames are allowed to use shared cache,
+ so that the same
+ in-memory database can be accessed from multiple database connections.
+
Avoid resetting the schema of shared cache connections when any one
+ connection closes. Instead, wait for the last connection to close before
+ resetting the schema.
+
In the RTREE extension, when rounding 64-bit floating point numbers
+ to 32-bit for storage, always round in a direction that causes the
+ bounding box to get larger.
+
Adjust the unix driver to avoid unnecessary calls to fchown().
+
Add interfaces sqlite3_quota_ferror() and sqlite3_quota_file_available()
+ to the test_quota.c module.
+
The sqlite3_create_module() and sqlite3_create_module_v2() interfaces
+ return SQLITE_MISUSE on any attempt to overload or replace a virtual table
+ module. The destructor is always called in this case, in accordance with
+ historical and current documentation.
+
Drop built-in support for OS/2. If you need to upgrade an OS/2
+ application to use this or a later version of SQLite,
+ then add an application-defined VFS using the
+ sqlite3_vfs_register() interface. The code removed in this release can
+ serve as a baseline for the application-defined VFS.
+
Ensure that floating point values are preserved exactly when reconstructing
+ a database from the output of the ".dump" command of the
+ command-line shell.
+
Improvements to the windows makefiles and build processes.
+
Enhancements to PRAGMA integrity_check and PRAGMA quick_check so that
+ they can optionally check just a single attached database instead of all
+ attached databases.
+
Enhancements to WAL mode processing that ensure that at least one
+ valid read-mark is available at all times, so that read-only processes
+ can always read the database.
+
Performance enhancements in the sorter used by ORDER BY and CREATE INDEX.
+
Avoid invoking the sqlite3_trace() callback multiple times when a
+ statement is automatically reprepared due to SQLITE_SCHEMA errors.
+
Added support for Windows Phone 8 platforms
+
Enhance IN operator processing to make use of indices with numeric
+ affinities.
+
Do full-table scans using covering indices when possible, under the
+ theory that an index will be smaller and hence can be scanned with
+ less I/O.
+
Enhance the query optimizer so that ORDER BY clauses are more aggressively
+ optimized, especially in joins where various terms of the ORDER BY clause
+ come from separate tables of the join.
+
Add the ability to implement FROM clause subqueries as coroutines rather
+ that manifesting the subquery into a temporary table.
+
Enhancements the command-line shell:
+
+
Added the ".print" command
+
Negative numbers in the ".width" command cause right-alignment
+
Add the ".wheretrace" command when compiled with SQLITE_DEBUG
+
Fix a bug, introduced in version 3.7.15, that causes a segfault if
+ the AS name of a result column of a SELECT statement is used as a logical
+ term in the WHERE clause. Ticket
+ a7b7803e8d1e869.
+
+
Fix a bug, introduced in version 3.7.15, that causes an ORDER BY clause
+ to be optimized out of a three-way join when the ORDER BY is actually
+ required.
+ Ticket 598f5f7596b055
+
+
Performance improvements for PRAGMA incremental_vacuum, especially in
+ cases where the number of free pages is greater than what will fit on a
+ single trunk page of the freelist.
+
Improved optimization of queries containing aggregate min() or max().
+
Enhance virtual tables so that they can potentially use an index when
+ the WHERE clause contains the IN operator.
+
Allow indices to be used for sorting even if prior terms of the index
+ are constrained by IN operators in the WHERE clause.
+
Enhance the PRAGMA table_info command so that the "pk" column is an
+ increasing integer to show the order of columns in the primary key.
+
Enhance the query optimizer to exploit transitive join constraints.
+
Performance improvements in the query optimizer.
+
Enhance the command-line shell so that a non-zero argument to the
+ ".exit" command causes the shell to exit immediately without cleanly
+ shutting down the database connection.
+
Improved error messages for invalid boolean arguments to dot-commands
+ in the command-line shell.
+
Improved error messages for "foreign key mismatch" showing the names of
+ the two tables involved.
+
Change to use strncmp() or the equivalent instead of memcmp() when
+ comparing non-zero-terminated strings.
+
Update cygwin interfaces to omit deprecated API calls.
+
Enhance the spellfix1 extension so that the edit distance cost table can
+ be changed at runtime by inserting a string like 'edit_cost_table=TABLE'
+ into the "command" field.
+
+
Bug fix: repair a long-standing problem that could cause incorrect query
+ results in a 3-way or larger join that compared INTEGER fields against TEXT
+ fields in two or more places.
+ Ticket fc7bd6358f
+
Bug fix: Issue an error message if the 16-bit reference counter on a
+ view overflows due to an overly complex query.
+
Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply
+ nested UNION ALL queries.
+
Bug fix: Make sure the schema is up-to-date prior to running pragmas
+ table_info, index_list, index_info, and foreign_key_list.
+
+
Performance improvements for PRAGMA incremental_vacuum, especially in
+ cases where the number of free pages is greater than what will fit on a
+ single trunk page of the freelist.
+
Improved optimization of queries containing aggregate min() or max().
+
Enhance virtual tables so that they can potentially use an index when
+ the WHERE clause contains the IN operator.
+
Allow indices to be used for sorting even if prior terms of the index
+ are constrained by IN operators in the WHERE clause.
+
Enhance the PRAGMA table_info command so that the "pk" column is an
+ increasing integer to show the order of columns in the primary key.
+
Enhance the query optimizer to exploit transitive join constraints.
+
Performance improvements in the query optimizer.
+
Enhance the command-line shell so that a non-zero argument to the
+ ".exit" command causes the shell to exit immediately without cleanly
+ shutting down the database connection.
+
Improved error messages for invalid boolean arguments to dot-commands
+ in the command-line shell.
+
Improved error messages for "foreign key mismatch" showing the names of
+ the two tables involved.
+
Change to use strncmp() or the equivalent instead of memcmp() when
+ comparing non-zero-terminated strings.
+
Update cygwin interfaces to omit deprecated API calls.
+
Enhance the spellfix1 extension so that the edit distance cost table can
+ be changed at runtime by inserting a string like 'edit_cost_table=TABLE'
+ into the "command" field.
+
+
Bug fix: repair a long-standing problem that could cause incorrect query
+ results in a 3-way or larger join that compared INTEGER fields against TEXT
+ fields in two or more places.
+ Ticket fc7bd6358f
+
Bug fix: Issue an error message if the 16-bit reference counter on a
+ view overflows due to an overly complex query.
+
Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply
+ nested UNION ALL queries.
+
Bug fix: Make sure the schema is up-to-date prior to running pragmas
+ table_info, index_list, index_info, and foreign_key_list.
+
+
+
Fix for a bug in the ORDER BY optimizer that was introduced in
+ version 3.7.15 which would sometimes optimize out the sorting step
+ when in fact the sort was required.
+ Ticket a179fe7465
+
Fix a long-standing bug in the CAST expression that would recognize UTF16
+ characters as digits even if their most-significant-byte was not zero.
+ Ticket 689137afb6da41.
+
Fix a bug in the NEAR operator of FTS3 when applied to subfields.
+ Ticket 38b1ae018f.
+
Fix a long-standing bug in the storage engine that would (very rarely)
+ cause a spurious report of an SQLITE_CORRUPT error but which was otherwise
+ harmless.
+ Ticket 6bfb98dfc0c.
+
The SQLITE_OMIT_MERGE_SORT option has been removed. The merge sorter is
+ now a required component of SQLite.
+
Fixed lots of spelling errors in the source-code comments
+
Performance improvements for PRAGMA incremental_vacuum, especially in
+ cases where the number of free pages is greater than what will fit on a
+ single trunk page of the freelist.
+
Improved optimization of queries containing aggregate min() or max().
+
Enhance virtual tables so that they can potentially use an index when
+ the WHERE clause contains the IN operator.
+
Allow indices to be used for sorting even if prior terms of the index
+ are constrained by IN operators in the WHERE clause.
+
Enhance the PRAGMA table_info command so that the "pk" column is an
+ increasing integer to show the order of columns in the primary key.
+
Enhance the query optimizer to exploit transitive join constraints.
+
Performance improvements in the query optimizer.
+
Enhance the command-line shell so that a non-zero argument to the
+ ".exit" command causes the shell to exit immediately without cleanly
+ shutting down the database connection.
+
Improved error messages for invalid boolean arguments to dot-commands
+ in the command-line shell.
+
Improved error messages for "foreign key mismatch" showing the names of
+ the two tables involved.
+
Change to use strncmp() or the equivalent instead of memcmp() when
+ comparing non-zero-terminated strings.
+
Update cygwin interfaces to omit deprecated API calls.
+
Enhance the spellfix1 extension so that the edit distance cost table can
+ be changed at runtime by inserting a string like 'edit_cost_table=TABLE'
+ into the "command" field.
+
+
Bug fix: repair a long-standing problem that could cause incorrect query
+ results in a 3-way or larger join that compared INTEGER fields against TEXT
+ fields in two or more places.
+ Ticket fc7bd6358f
+
Bug fix: Issue an error message if the 16-bit reference counter on a
+ view overflows due to an overly complex query.
+
Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply
+ nested UNION ALL queries.
+
Bug fix: Make sure the schema is up-to-date prior to running pragmas
+ table_info, index_list, index_info, and foreign_key_list.
+
+
+
Fix for a bug in the ORDER BY optimizer that was introduced in
+ version 3.7.15 which would sometimes optimize out the sorting step
+ when in fact the sort was required.
+ Ticket a179fe7465
+
Fix a long-standing bug in the CAST expression that would recognize UTF16
+ characters as digits even if their most-significant-byte was not zero.
+ Ticket 689137afb6da41.
+
Fix a bug in the NEAR operator of FTS3 when applied to subfields.
+ Ticket 38b1ae018f.
+
Fix a long-standing bug in the storage engine that would (very rarely)
+ cause a spurious report of an SQLITE_CORRUPT error but which was otherwise
+ harmless.
+ Ticket 6bfb98dfc0c.
+
The SQLITE_OMIT_MERGE_SORT option has been removed. The merge sorter is
+ now a required component of SQLite.
+
Fixed lots of spelling errors in the source-code comments
+
+
Fix a bug (present since version 3.7.13) that could result in database corruption
+ on windows if two or more processes try to access the same database file at the
+ same time and immediately after third process crashed in the middle of committing
+ to that same file. See ticket
+ 7ff3120e4f for further
+ information.
+
+
Report rollback recovery in the error log as SQLITE_NOTICE_RECOVER_ROLLBACK.
+ Change the error log code for WAL recover from
+ SQLITE_OK to SQLITE_NOTICE_RECOVER_WAL.
+
Increase the default value of SQLITE_MAX_SCHEMA_RETRY to 50 and make sure
+ that it is honored in every place that a schema change might force a statement
+ retry.
+
Add a new test harness called "mptester" used to verify correct operation
+ when multiple processes are using the same database file at the same time.
+
Enhance the extension loading mechanism to be more flexible (while
+ still maintaining backwards compatibility) in two ways:
+
+
If the default entry point "sqlite3_extension_init" is not present in
+ the loadable extension, also try an entry point "sqlite3_X_init" where
+ "X" is based on the shared library filename. This allows every extension
+ to have a different entry point, which allows them to be statically linked
+ with no code changes.
+
The shared library filename passed to sqlite3_load_extension() may
+ omit the filename suffix, and an appropriate architecture-dependent
+ suffix (".so", ".dylib", or ".dll") will be added automatically.
+
+
Added many new loadable extensions to the source tree, including
+ amatch, closure, fuzzer, ieee754, nextchar, regexp, spellfix,
+ and wholenumber. See header comments on each extension source file
+ for further information about what that extension does.
+
Enhance FTS3 to avoid using excess stack space when there are a huge
+ number of terms on the right-hand side of the MATCH operator. A side-effect
+ of this change is that the MATCH operator can only accommodate 12 NEAR
+ operators at a time.
+
Enhance the fts4aux virtual table so that it can be a TEMP table.
+
Query planner enhancement: Use the transitive property of constraints
+ to move constraints into the outer loops of a join whenever possible,
+ thereby reducing the amount of work that needs to occur in inner loops.
+
Discontinue the use of posix_fallocate() on unix, as it does not work on all
+ filesystems.
+
Improved tracing and debugging facilities in the Windows VFS.
+
Bug fix: Fix a potential database corruption bug
+ in shared cache mode when one
+ database connection is closed while another is in the middle of a write
+ transaction.
+ Ticket e636a050b7
+
Bug fix:
+ Only consider AS names from the result set as candidates for resolving
+ identifiers in the WHERE clause if there are no other matches. In the
+ ORDER BY clause, AS names take priority over any column names.
+ Ticket 2500cdb9be05
+
Bug fix: Do not allow a virtual table to cancel the ORDER BY clause unless
+ all outer loops are guaranteed to return no more than one row result.
+ Ticket ba82a4a41eac1.
+
Bug fix: Do not suppress the ORDER BY clause on a virtual table query if
+ an IN constraint is used.
+ Ticket f69b96e3076e.
+
Bug fix: The command-line shell gives an exit code of 0 when terminated
+ using the ".quit" command.
+
Bug fix: When a compound query that uses an ORDER BY clause
+ with a COLLATE operator, make sure that the sorting occurs
+ according to the specified collation and that the comparisons associate with
+ the compound query use the native collation. Ticket
+ 6709574d2a8d8.
+
Bug fix: Makes sure the authorizer callback gets
+ a valid pointer to the string "ROWID" for the column-name parameter when
+ doing an UPDATE that changes the rowid. Ticket
+ 0eb70d77cb05bb2272
+
Bug fix: Do not move WHERE clause terms inside OR expressions that are
+ contained within an ON clause of a LEFT JOIN. Ticket
+ f2369304e4
+
Bug fix: Make sure an error is always reported when attempting to preform
+ an operation that requires a collating sequence that is missing.
+ Ticket 0fc59f908b
+
+
The ANALYZE command now gathers statistics on tables even if they
+ have no indices.
+
Tweaks to the query planner to help it do a better job of finding the
+ most efficient query plan for each query.
+
Enhanced the internal text-to-numeric conversion routines so that they
+ work with UTF8 or UTF16, thereby avoiding some UTF16-to-UTF8 text
+ conversions.
+
Fix a problem that was causing excess memory usage with large WAL
+ transactions in win32 systems.
+
The interface between the VDBE and B-Tree layer is enhanced such that
+ the VDBE provides hints to the B-Tree layer letting the B-Tree layer
+ know when it is safe to use hashing instead of B-Trees for transient
+ tables.
+
Added support for FTS4 and enhancements
+ to the FTS matchinfo() function.
+
Added the test_superlock.c module which provides example
+ code for obtaining an exclusive lock to a rollback
+ or WAL database.
+
Added the test_multiplex.c module which provides
+ an example VFS that provides multiplexing (sharding)
+ of a DB, splitting it over multiple files of fixed size.
+
Fix a bug involving
+ frequent changes in and out of WAL mode and
+ VACUUM that could (in theory) cause database corruption.
+
Enhance the sqlite3_trace() mechanism so that nested SQL statements
+ such as might be generated by virtual tables are shown but are shown
+ in comments and without parameter expansion. This
+ greatly improves tracing output when using the FTS3/4 and/or RTREE
+ virtual tables.
+
Change the xFileControl() methods on all built-in VFSes to return
+ SQLITE_NOTFOUND instead of SQLITE_ERROR for an unrecognized
+ operation code.
+
Improvements to the query planner so that it makes better estimates of
+ plan costs and hence does a better job of choosing the right plan,
+ especially when SQLITE_ENABLE_STAT2 is used.
+
Fix a bug which prevented deferred foreign key constraints from being
+ enforced when sqlite3_finalize() was not
+ called by one statement with a failed foreign key constraint prior to
+ another statement with foreign key constraints running.
+
Integer arithmetic operations that would have resulted in overflow
+ are now performed using floating-point instead.
+
Increased the version number on the VFS object to
+ 3 and added new methods xSetSysCall, xGetSysCall, and xNextSysCall
+ used for doing full-coverage testing.
+
Increase the maximum value of SQLITE_MAX_ATTACHED from 30 to 62
+ (though the default value remains at 10).
+
Fix a bug in 3.7.6 that only appears if the SQLITE_FCNTL_SIZE_HINT
+ file control is used with a build of SQLite that makes use of the
+ HAVE_POSIX_FALLOCATE compile-time option and which has
+ SQLITE_ENABLE_LOCKING_MODE turned off.
+
Fix a problem with WAL mode which could cause transactions to
+ silently rollback if the cache_size is set very small (less than 10)
+ and SQLite comes under memory pressure.
+
+
If a search token (on the right-hand side of the MATCH operator) in
+ FTS4 begins with "^" then that token must be the first in its field
+ of the document. ** Potentially Incompatible Change **
+
Enhancements to the sqlite3_analyzer utility program, including the
+ --pageinfo and --stats options and support for multiplexed databases.
+
Enhance the sqlite3_data_count() interface so that it can be used to
+ determine if SQLITE_DONE has been seen on the prepared statement.
+
Added the SQLITE_FCNTL_OVERWRITE file-control by which the SQLite core
+ indicates to the VFS that the current transaction will overwrite the
+ entire database file.
+
Remove limits on the magnitude of precision and width value in the
+ format specifiers of the sqlite3_mprintf() family of string rendering
+ routines.
+
Fix a bug that prevent ALTER TABLE ... RENAME from working
+ on some virtual tables in a database with a UTF16 encoding.
+
Fix a bug in ASCII-to-float conversion that causes slow performance and
+ incorrect results when converting numbers with ridiculously large exponents.
+
Fix a bug that causes incorrect results in aggregate queries that use
+ multiple aggregate functions whose arguments contain complicated expressions
+ that differ only in the case of string literals contained within those
+ expressions.
+
Fix a bug that prevented the page_count and quick_check pragmas from
+ working correctly if their names were capitalized.
+
Fix a bug in virtual table implementation that causes a crash if
+ an FTS4 table is dropped inside a transaction and
+ a SAVEPOINT occurs afterwards.
+
A running SELECT statement that lacks a FROM clause (or any other statement that
+ never reads or writes from any database file) will not prevent a read
+ transaction from closing.
+
Add the SQLITE_DEFAULT_AUTOMATIC_INDEX compile-time option. Setting this option
+ to 0 disables automatic indices by default.
+
Added an optional 5th parameter defining the collating sequence to the
+ next_char() extension SQL function.
+
The SQLITE_BUSY_SNAPSHOT extended error code is returned in WAL mode when
+ a read transaction cannot be upgraded to a write transaction because the read is
+ on an older snapshot.
+
Enhancements to the sqlite3_analyzer utility program to provide size
+ information separately for each individual index of a table, in addition to
+ the aggregate size.
+
Allow read transactions to be freely opened and closed by SQL statements run
+ from within the implementation of application-defined SQL functions if the
+ function is called by a SELECT statement that does not access any database table.
+
Disable the use of posix_fallocate() on all (unix) systems unless the
+ HAVE_POSIX_FALLOCATE compile-time option is used.
+
Update the ".import" command in the command-line shell to support multi-line
+ fields and correct RFC-4180 quoting and to issue warning and/or error messages
+ if the input text is not strictly RFC-4180 compliant.
+
Bug fix: In the unicode61 tokenizer of FTS4, treat all private code points
+ as identifier symbols.
+
Bug fix: Bare identifiers in ORDER BY clauses bind more tightly to output column
+ names, but identifiers in expressions bind more tightly to input column names.
+ Identifiers in GROUP BY clauses always prefer output column names, however.
+
Bug fixes: Multiple problems in the legacy query optimizer were fixed by the
+ move to NGQP.
+
+
A running SELECT statement that lacks a FROM clause (or any other statement that
+ never reads or writes from any database file) will not prevent a read
+ transaction from closing.
+
Add the SQLITE_DEFAULT_AUTOMATIC_INDEX compile-time option. Setting this option
+ to 0 disables automatic indices by default.
+
Added an optional 5th parameter defining the collating sequence to the
+ next_char() extension SQL function.
+
The SQLITE_BUSY_SNAPSHOT extended error code is returned in WAL mode when
+ a read transaction cannot be upgraded to a write transaction because the read is
+ on an older snapshot.
+
Enhancements to the sqlite3_analyzer utility program to provide size
+ information separately for each individual index of a table, in addition to
+ the aggregate size.
+
Allow read transactions to be freely opened and closed by SQL statements run
+ from within the implementation of application-defined SQL functions if the
+ function is called by a SELECT statement that does not access any database table.
+
Disable the use of posix_fallocate() on all (unix) systems unless the
+ HAVE_POSIX_FALLOCATE compile-time option is used.
+
Update the ".import" command in the command-line shell to support multi-line
+ fields and correct RFC-4180 quoting and to issue warning and/or error messages
+ if the input text is not strictly RFC-4180 compliant.
+
Bug fix: In the unicode61 tokenizer of FTS4, treat all private code points
+ as identifier symbols.
+
Bug fix: Bare identifiers in ORDER BY clauses bind more tightly to output column
+ names, but identifiers in expressions bind more tightly to input column names.
+ Identifiers in GROUP BY clauses always prefer output column names, however.
+
Bug fixes: Multiple problems in the legacy query optimizer were fixed by the
+ move to NGQP.
+
+
+
Fix an off-by-one error that caused quoted empty string at the end of a
+CRNL-terminated line of CSV input to be misread by the command-line shell.
+
Fix a query planner bug involving a LEFT JOIN with a BETWEEN or LIKE/GLOB
+constraint and then another INNER JOIN to the right that involves an OR constraint.
+
Fix a query planner bug that could result in a segfault when querying tables
+with a UNIQUE or PRIMARY KEY constraint with more than four columns.
+
+
A running SELECT statement that lacks a FROM clause (or any other statement that
+ never reads or writes from any database file) will not prevent a read
+ transaction from closing.
+
Add the SQLITE_DEFAULT_AUTOMATIC_INDEX compile-time option. Setting this option
+ to 0 disables automatic indices by default.
+
Added an optional 5th parameter defining the collating sequence to the
+ next_char() extension SQL function.
+
The SQLITE_BUSY_SNAPSHOT extended error code is returned in WAL mode when
+ a read transaction cannot be upgraded to a write transaction because the read is
+ on an older snapshot.
+
Enhancements to the sqlite3_analyzer utility program to provide size
+ information separately for each individual index of a table, in addition to
+ the aggregate size.
+
Allow read transactions to be freely opened and closed by SQL statements run
+ from within the implementation of application-defined SQL functions if the
+ function is called by a SELECT statement that does not access any database table.
+
Disable the use of posix_fallocate() on all (unix) systems unless the
+ HAVE_POSIX_FALLOCATE compile-time option is used.
+
Update the ".import" command in the command-line shell to support multi-line
+ fields and correct RFC-4180 quoting and to issue warning and/or error messages
+ if the input text is not strictly RFC-4180 compliant.
+
Bug fix: In the unicode61 tokenizer of FTS4, treat all private code points
+ as identifier symbols.
+
Bug fix: Bare identifiers in ORDER BY clauses bind more tightly to output column
+ names, but identifiers in expressions bind more tightly to input column names.
+ Identifiers in GROUP BY clauses always prefer output column names, however.
+
Bug fixes: Multiple problems in the legacy query optimizer were fixed by the
+ move to NGQP.
+
+
+
Fix an off-by-one error that caused quoted empty string at the end of a
+CRNL-terminated line of CSV input to be misread by the command-line shell.
+
Fix a query planner bug involving a LEFT JOIN with a BETWEEN or LIKE/GLOB
+constraint and then another INNER JOIN to the right that involves an OR constraint.
+
Fix a query planner bug that could result in a segfault when querying tables
+with a UNIQUE or PRIMARY KEY constraint with more than four columns.
+
+
+
Fix a bug in the optimization that attempts to omit unused LEFT JOINs
+
+
Added support for "sz=NNN" parameters at the end of
+ sqlite_stat1.stat fields
+ used to specify the average length in bytes for table and index rows.
+
Avoid running foreign-key constraint checks on an UPDATE if none of the
+ modified columns are associated with foreign keys.
+
Added the win32-longpath VFS on windows, permitting filenames up to 32K
+ characters in length.
+
The Date And Time Functions are enhanced so that the current time
+ (ex: julianday('now')) is always the same for multiple function invocations
+ within the same sqlite3_step() call.
+
Add the "totype.c" extension, implementing the tointeger() and toreal()
+ SQL functions.
+
FTS4 queries are better able to make use of docid<$limit constraints to
+ limit the amount of I/O required.
+
The VACUUM command packs the database about 1% tighter.
+
The sqlite3_analyzer utility program is updated to provide better descriptions
+ and to compute a more accurate estimate for "Non-sequential pages"
+
Refactor the implementation of PRAGMA statements to improve parsing performance.
+
The directory used to hold temporary files on unix can now be set using
+ the SQLITE_TMPDIR environment variable, which takes precedence over the
+ TMPDIR environment variable. The sqlite3_temp_directory global variable
+ still has higher precedence than both environment variables, however.
+
Additional changes in version 3.8.10.2 (2015-05-20):
+
+
Fix an index corruption issue introduced by version 3.8.7. An index
+ with a TEXT key can be corrupted by an INSERT into the corresponding
+ table if the table has two nested triggers that convert the key value to INTEGER
+ and back to TEXT again.
+ Ticket 34cd55d68e0
+
+
Enhance the page cache so that it can preallocate a block of memory to
+ use for the initial set page cache lines. Set the default preallocation
+ to 100 pages. Yields about a 5% performance increase on common workloads.
+
Miscellaneous micro-optimizations result in 22.3% more work for the same
+ number of CPU cycles relative to the previous release.
+ SQLite now runs twice as fast as version 3.8.0 and three times as
+ fast as version 3.3.9.
+ (Measured using
+ cachegrind on the
+ speedtest1.c workload on
+ Ubuntu 14.04 x64 with gcc 4.8.2 and -Os. Your performance may vary.)
+
Enhance the page cache so that it can preallocate a block of memory to
+ use for the initial set page cache lines. Set the default preallocation
+ to 100 pages. Yields about a 5% performance increase on common workloads.
+
Miscellaneous micro-optimizations result in 22.3% more work for the same
+ number of CPU cycles relative to the previous release.
+ SQLite now runs twice as fast as version 3.8.0 and three times as
+ fast as version 3.3.9.
+ (Measured using
+ cachegrind on the
+ speedtest1.c workload on
+ Ubuntu 14.04 x64 with gcc 4.8.2 and -Os. Your performance may vary.)
+
Changed the defined behavior for the CAST expression when floating point values
+ greater than +9223372036854775807 are cast into integers so that the
+ result is the largest possible integer, +9223372036854775807, instead of
+ the smallest possible integer, -9223372036854775808. After this change,
+ CAST(9223372036854775809.0 as INT) yields +9223372036854775807 instead
+ of -9223372036854775808.
+ ← Potentially Incompatible Change!
+
Extended the virtual table interface, and in particular the
+ sqlite3_index_info object to allow a virtual table to report its estimate
+ on the number of rows that will be returned by a query.
+
Update the R-Tree extension to make use of the enhanced virtual table
+ interface.
+
Added SQLITE_DETERMINISTIC as an optional bit in the 4th argument to the
+ sqlite3_create_function() and related interfaces, providing applications with
+ the ability to create new functions that can be factored out of inner loops when
+ they have constant arguments.
+
Add SQLITE_READONLY_DBMOVED error code, returned at the beginning of a
+ transaction, to indicate that the underlying database file has been renamed
+ or moved out from under SQLite.
+
Allow arbitrary expressions, including function calls and subqueries, in
+ the filename argument to ATTACH.
+
Fix a bug (ticket 4c86b126f2)
+ that causes rows to go missing on some queries with OR clauses and
+ IS NOT NULL operators in the WHERE clause, when the SQLITE_ENABLE_STAT3
+ or SQLITE_ENABLE_STAT4 compile-time options are used.
+
Fix a harmless compiler warning that was causing problems for VS2013.
+
Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
+
Change the datatype of SrcList.nSrc from type u8 to type int to work around
+ an issue in the C compiler on AIX.
+
Get extension loading working on Cygwin.
+
Bug fix: Fix the char() SQL function so that it returns an empty string
+ rather than an "out of memory" error when called with zero arguments.
+
Bug fix: DISTINCT now recognizes that a zeroblob and a blob of all
+ 0x00 bytes are the same thing.
+ Ticket [fccbde530a]
+
Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
+ term in the WHERE clause and also contain an OR term in the WHERE clause and
+ are compiled with SQLITE_ENABLE_STAT4.
+ Ticket [4c86b126f2]
+
Bug fix: Make sure "rowid" columns are correctly resolved in joins between
+ normal tables and WITHOUT ROWID tables.
+ Ticket [c34d0557f7]
+
Bug fix: Make sure the same temporary registers are not used in concurrent
+ co-routines used to implement compound SELECT statements containing ORDER
+ BY clauses, as such use can lead to incorrect answers.
+ Ticket [8c63ff0eca]
+
Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
+ Ticket [65bdeb9739]
+
Bug fix: Repair a name-resolution error that can occur in sub-select statements
+ contained within a TRIGGER.
+ Ticket [4ef7e3cfca]
+
Bug fix: Fix column default values expressions of the form
+ "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
+ the column to a floating point value approximately equal to
+ +9223372036854775808.0.
+
Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
+
Change the datatype of SrcList.nSrc from type u8 to type int to work around
+ an issue in the C compiler on AIX.
+
Get extension loading working on Cygwin.
+
Bug fix: Fix the char() SQL function so that it returns an empty string
+ rather than an "out of memory" error when called with zero arguments.
+
Bug fix: DISTINCT now recognizes that a zeroblob and a blob of all
+ 0x00 bytes are the same thing.
+ Ticket [fccbde530a]
+
Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
+ term in the WHERE clause and also contain an OR term in the WHERE clause and
+ are compiled with SQLITE_ENABLE_STAT4.
+ Ticket [4c86b126f2]
+
Bug fix: Make sure "rowid" columns are correctly resolved in joins between
+ normal tables and WITHOUT ROWID tables.
+ Ticket [c34d0557f7]
+
Bug fix: Make sure the same temporary registers are not used in concurrent
+ co-routines used to implement compound SELECT statements containing ORDER
+ BY clauses, as such use can lead to incorrect answers.
+ Ticket [8c63ff0eca]
+
Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
+ Ticket [65bdeb9739]
+
Bug fix: Repair a name-resolution error that can occur in sub-select statements
+ contained within a TRIGGER.
+ Ticket [4ef7e3cfca]
+
Bug fix: Fix column default values expressions of the form
+ "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
+ the column to a floating point value approximately equal to
+ +9223372036854775808.0.
+
+
Additional changes in version 3.8.4.1 (2014-03-11):
+
+
Work around a C-preprocessor macro conflict that breaks the build for some
+ configurations with Microsoft Visual Studio.
+
When computing the cost of the skip-scan optimization, take into account the
+ fact that multiple seeks are required.
+
Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
+
Change the datatype of SrcList.nSrc from type u8 to type int to work around
+ an issue in the C compiler on AIX.
+
Get extension loading working on Cygwin.
+
Bug fix: Fix the char() SQL function so that it returns an empty string
+ rather than an "out of memory" error when called with zero arguments.
+
Bug fix: DISTINCT now recognizes that a zeroblob and a blob of all
+ 0x00 bytes are the same thing.
+ Ticket [fccbde530a]
+
Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
+ term in the WHERE clause and also contain an OR term in the WHERE clause and
+ are compiled with SQLITE_ENABLE_STAT4.
+ Ticket [4c86b126f2]
+
Bug fix: Make sure "rowid" columns are correctly resolved in joins between
+ normal tables and WITHOUT ROWID tables.
+ Ticket [c34d0557f7]
+
Bug fix: Make sure the same temporary registers are not used in concurrent
+ co-routines used to implement compound SELECT statements containing ORDER
+ BY clauses, as such use can lead to incorrect answers.
+ Ticket [8c63ff0eca]
+
Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
+ Ticket [65bdeb9739]
+
Bug fix: Repair a name-resolution error that can occur in sub-select statements
+ contained within a TRIGGER.
+ Ticket [4ef7e3cfca]
+
Bug fix: Fix column default values expressions of the form
+ "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
+ the column to a floating point value approximately equal to
+ +9223372036854775808.0.
+
+
Additional changes in version 3.8.4.1 (2014-03-11):
+
+
Work around a C-preprocessor macro conflict that breaks the build for some
+ configurations with Microsoft Visual Studio.
+
When computing the cost of the skip-scan optimization, take into account the
+ fact that multiple seeks are required.
+
+
Additional changes in version 3.8.4.2 (2014-03-26):
+
+
Fix a potential buffer overread that could result when trying to search a
+ corrupt database file.
+
Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
+
Change the datatype of SrcList.nSrc from type u8 to type int to work around
+ an issue in the C compiler on AIX.
+
Get extension loading working on Cygwin.
+
Bug fix: Fix the char() SQL function so that it returns an empty string
+ rather than an "out of memory" error when called with zero arguments.
+
Bug fix: DISTINCT now recognizes that a zeroblob and a blob of all
+ 0x00 bytes are the same thing.
+ Ticket [fccbde530a]
+
Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
+ term in the WHERE clause and also contain an OR term in the WHERE clause and
+ are compiled with SQLITE_ENABLE_STAT4.
+ Ticket [4c86b126f2]
+
Bug fix: Make sure "rowid" columns are correctly resolved in joins between
+ normal tables and WITHOUT ROWID tables.
+ Ticket [c34d0557f7]
+
Bug fix: Make sure the same temporary registers are not used in concurrent
+ co-routines used to implement compound SELECT statements containing ORDER
+ BY clauses, as such use can lead to incorrect answers.
+ Ticket [8c63ff0eca]
+
Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
+ Ticket [65bdeb9739]
+
Bug fix: Repair a name-resolution error that can occur in sub-select statements
+ contained within a TRIGGER.
+ Ticket [4ef7e3cfca]
+
Bug fix: Fix column default values expressions of the form
+ "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
+ the column to a floating point value approximately equal to
+ +9223372036854775808.0.
+
+
Additional changes in version 3.8.4.1 (2014-03-11):
+
+
Work around a C-preprocessor macro conflict that breaks the build for some
+ configurations with Microsoft Visual Studio.
+
When computing the cost of the skip-scan optimization, take into account the
+ fact that multiple seeks are required.
+
+
Additional changes in version 3.8.4.2 (2014-03-26):
+
+
Fix a potential buffer overread that could result when trying to search a
+ corrupt database file.
+
+
Additional changes in version 3.8.4.3 (2014-04-03):
+
+
Add a
+ one-character fix
+ for a problem that might cause incorrect query results on a query that mixes
+ DISTINCT, GROUP BY in a subquery, and ORDER BY.
+ Ticket 98825a79ce14.
+
Render expressions of the form "x IN (?)" (with a single value in
+ the list on the right-hand side of the IN operator) as if they where "x==?",
+ Similarly optimize "x NOT IN (?)"
+
Duplicate row returned on a query against a table with more than
+ 16 indices, each on a separate column, and all used via OR-connected constraints.
+ Ticket 10fb063b11
+
Partial index causes assertion fault on UPDATE OR REPLACE.
+ Ticket 2ea3e9fe63
+
Crash when calling undocumented SQL function sqlite_rename_parent()
+ with NULL parameters.
+ Ticket 264b970c43
+
ORDER BY ignored if the query has an identical GROUP BY.
+ Ticket b75a9ca6b0
+
The group_concat(x,'') SQL function returns NULL instead of an empty string
+ when all inputs are empty strings.
+ Ticket 55746f9e65
+
Fix a bug in the VDBE code generator that caused crashes when
+ doing an INSERT INTO ... SELECT statement where the number of columns
+ being inserted is larger than the number of columns in the destination
+ table.
+ Ticket e9654505cfd
+
Fix a problem in CSV import in the command-line shell
+ where if the leftmost field of the first row
+ in the CSV file was both zero bytes in size and unquoted no data would
+ be imported.
+
Fix a problem in FTS4 where the left-most column that contained
+ the notindexed column name as a prefix
+ was not indexed rather than the column whose name matched exactly.
+
Fix the sqlite3_db_readonly() interface so that it returns true if
+ the database is read-only due to the file format write version number
+ being too large.
+
+
Deactivate the DISTINCT keyword on subqueries on the
+ right-hand side of the IN operator.
+
Add the capability of evaluating an IN operator as a sequence
+ of comparisons as an alternative to using a table lookup. Use the sequence
+ of comparisons implementation in circumstances where it is likely to be
+ faster, such as when the right-hand side of the IN operator
+ is small and/or changes frequently.
+
Fix a bug in R-Tree extension, introduced in the previous release,
+ that can cause an
+ incorrect results for queries that use the rowid of the R-Tree on the
+ left-hand side of an IN operator.
+ Ticket d2889096e7bdeac6.
+
Fix the sqlite3_stmt_busy() interface so that it gives the correct answer
+ for ROLLBACK statements that have been stepped but never reset.
+
Fix a bug in that would cause a null pointer to be dereferenced
+ if a column with a DEFAULT that is an aggregate function tried to usee its
+ DEFAULT.
+ Ticket 3a88d85f36704eebe1
+
CSV output from the command-line shell now always uses CRNL for the
+ row separator and avoids inserting CR in front of NLs contained in
+ data.
+
Many micro-optimizations result in 20.3% more work for the same number
+ of CPU cycles relative to the previous release.
+ The cumulative performance increase since version 3.8.0 is 61%.
+ (Measured using
+ cachegrind on the
+ speedtest1.c workload on
+ Ubuntu 13.10 x64 with gcc 4.8.1 and -Os. Your performance may vary.)
+
The sorter can use auxiliary helper threads to increase real-time response.
+ This feature is off by default and may be
+ enabled using the PRAGMA threads command or the SQLITE_DEFAULT_WORKER_THREADS
+ compile-time option.
+
Enhance the skip-scan optimization so that it is able to skip index terms that
+ occur in the middle of the index, not just as the left-hand side of the index.
+
Fix a bug in the partial index implementation that might result in an incorrect
+ answer if a partial index is used in a subquery or in a view.
+ Ticket 98d973b8f5.
+
Fix a query planner bug that might cause a table to be scanned in the wrong direction
+ (thus reversing the order of output) when a DESC index is used to implement the ORDER BY
+ clause on a query that has an identical GROUP BY clause.
+ Ticket ba7cbfaedc7e6.
+
Fix a bug in sqlite3_trace() that was causing it to sometimes fail to print
+ an SQL statement if that statement needed to be re-prepared.
+ Ticket 11d5aa455e0d98f3c1e6a08
+
Show ASCII-art abstract syntax tree diagrams using the ".selecttrace"
+ and ".wheretrace" commands in the
+ command-line shell when compiled with SQLITE_DEBUG, SQLITE_ENABLE_SELECTTRACE,
+ and SQLITE_ENABLE_WHERETRACE. Also provide the sqlite3TreeViewExpr() and
+ sqlite3TreeViewSelect() entry points that can be invoked from with the
+ debugger to show the parse tree when stopped at a breakpoint.
+
Drop support for SQLITE_ENABLE_TREE_EXPLAIN. The SELECTTRACE mechanism provides
+ more useful diagnostics information.
+
New options to the command-line shell for configuring auxiliary
+ memory usage: --pagecache, --lookaside, and --scratch.
+
In PRAGMA journal_mode=TRUNCATE mode, call fsync() immediately after truncating
+ the journal file to ensure that the transaction is durable across a power loss.
+
Fix an assertion fault that can occur when updating the NULL value of a field
+ at the end of a table that was added using ALTER TABLE ADD COLUMN.
+
Do not attempt to use the strchrnul() function from the standard C library unless
+ the HAVE_STRCHRNULL compile-time option is set.
+
Fix a couple of problems associated with running an UPDATE or DELETE on a
+ VIEW with a rowid in the WHERE clause.
+
+
Enhance the ROLLBACK command so that pending queries are allowed to continue as long
+ as the schema is unchanged. Formerly, a ROLLBACK would cause all pending queries to
+ fail with an SQLITE_ABORT or SQLITE_ABORT_ROLLBACK error. That error is still returned
+ if the ROLLBACK modifies the schema.
+
Bug fix: Make sure that NULL results from OP_Column are fully and completely NULL and
+ do not have the MEM_Ephem bit set.
+ Ticket 094d39a4c95ee4.
+
Bug fix: The %c format in sqlite3_mprintf() is able to handle precisions greater than 70.
+
Bug fix: Do not automatically remove the DISTINCT keyword from a SELECT that forms
+ the right-hand side of an IN operator since it is necessary if the SELECT also
+ contains a LIMIT.
+ Ticket db87229497.
+
+
Bug fix: Ensure the cached KeyInfo objects (an internal abstraction not visible to the
+ application) do not go stale when operating in shared cache mode and frequently closing
+ and reopening some database connections while leaving other database connections on the
+ same shared cache open continuously. Ticket
+ e4a18565a36884b00edf.
+
Bug fix: Recognize that any column in the right-hand table of a LEFT JOIN can be
+ NULL even if the column has a NOT NULL constraint. Do not apply optimizations that
+ assume the column is never NULL. Ticket
+ 6f2222d550f5b0ee7ed.
+
+
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.
+
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.
+
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.
+
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.
+
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.
+
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.
+
Additional changes in version 3.8.8.1 (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.
+
+
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.
+
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.
+
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.
+
Additional changes in version 3.8.8.1 (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.
+
+
+
Additional changes in version 3.8.8.2 (2015-01-30):
+
+
Enhance sqlite3_wal_checkpoint_v2(TRUNCATE) interface so that it truncates the
+ WAL file even if there is no checkpoint work to be done.
+
+
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.
+
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.
+
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.
+
Additional changes in version 3.8.8.1 (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.
+
+
+
Additional changes in version 3.8.8.2 (2015-01-30):
+
+
Enhance sqlite3_wal_checkpoint_v2(TRUNCATE) interface so that it truncates the
+ WAL file even if there is no checkpoint work to be done.
+
+
+
Additional changes in version 3.8.8.3 (2015-02-25):
+
+
Fix a bug (ticket
+ 2326c258d02ead33) that can lead
+ to incorrect results if the qualifying constraint of a partial index appears in the
+ ON clause of a LEFT JOIN.
+
Added the ability to link against the
+ "linenoise"
+ command-line editing library in unix builds of the command-line shell.
+
+
Ensure that prepared statements automatically reset on extended
+ error codes of SQLITE_BUSY and SQLITE_LOCKED even when compiled
+ using SQLITE_OMIT_AUTORESET.
+
Correct miscounts in the sqlite3_analyzer.exe utility related
+ to WITHOUT ROWID tables.
+
Improve the performance of fts3/4 queries that use the OR operator
+ and at least one auxiliary fts function.
+
Fix a bug in the fts3 snippet() function causing it to omit
+ leading separator characters from snippets that begin with the
+ first token in a column.
+
A VIEW may now reference undefined tables and functions when
+ initially created. Missing tables and functions are reported when
+ the VIEW is used in a query.
+
The query planner is now able to use partial indexes that contain
+ AND-connected terms in the WHERE clause.
+
The sqlite3_analyzer.exe utility is updated to report the depth of
+ each btree and to show the average fanout for indexes and
+ WITHOUT ROWID tables.
+
The sqlite3_memory_alarm() interface, which has been deprecated and
+ undocumented for 8 years, is changed into a no-op.
+
Important fixes:
+
Fixed a critical bug in the
+ SQLite Encryption Extension that
+ could cause the database to become unreadable and unrecoverable if a VACUUM command
+ changed the size of the encryption nonce.
+
Added a memory barrier in the implementation of
+ sqlite3_initialize() to help ensure that it is thread-safe.
+
Fix the OR optimization so that it always ignores subplans that
+ do not use an index.
+
Do not apply the WHERE-clause pushdown optimization on terms that originate
+ in the ON or USING clause of a LEFT JOIN. Fix for ticket
+ c2a19d81652f40568c.
+
+
A VIEW may now reference undefined tables and functions when
+ initially created. Missing tables and functions are reported when
+ the VIEW is used in a query.
+
The query planner is now able to use partial indexes that contain
+ AND-connected terms in the WHERE clause.
+
The sqlite3_analyzer.exe utility is updated to report the depth of
+ each btree and to show the average fanout for indexes and
+ WITHOUT ROWID tables.
+
The sqlite3_memory_alarm() interface, which has been deprecated and
+ undocumented for 8 years, is changed into a no-op.
+
Important fixes:
+
Fixed a critical bug in the
+ SQLite Encryption Extension that
+ could cause the database to become unreadable and unrecoverable if a VACUUM command
+ changed the size of the encryption nonce.
+
Added a memory barrier in the implementation of
+ sqlite3_initialize() to help ensure that it is thread-safe.
+
Fix the OR optimization so that it always ignores subplans that
+ do not use an index.
+
Do not apply the WHERE-clause pushdown optimization on terms that originate
+ in the ON or USING clause of a LEFT JOIN. Fix for ticket
+ c2a19d81652f40568c.
+
+
+
Additional changes in version 3.9.1 (2015-10-16):
+
+
Fix the json1 extension so that it does not recognize ASCII form-feed as a
+ whitespace character, in order to comply with RFC-7159. Fix for ticket
+ 57eec374ae1d0a1d
+
Add a few #ifdef and build script changes to address compilation issues that
+ appeared after the 3.9.0 release.
+
+
A VIEW may now reference undefined tables and functions when
+ initially created. Missing tables and functions are reported when
+ the VIEW is used in a query.
+
The query planner is now able to use partial indexes that contain
+ AND-connected terms in the WHERE clause.
+
The sqlite3_analyzer.exe utility is updated to report the depth of
+ each btree and to show the average fanout for indexes and
+ WITHOUT ROWID tables.
+
The sqlite3_memory_alarm() interface, which has been deprecated and
+ undocumented for 8 years, is changed into a no-op.
+
Important fixes:
+
Fixed a critical bug in the
+ SQLite Encryption Extension that
+ could cause the database to become unreadable and unrecoverable if a VACUUM command
+ changed the size of the encryption nonce.
+
Added a memory barrier in the implementation of
+ sqlite3_initialize() to help ensure that it is thread-safe.
+
Fix the OR optimization so that it always ignores subplans that
+ do not use an index.
+
Do not apply the WHERE-clause pushdown optimization on terms that originate
+ in the ON or USING clause of a LEFT JOIN. Fix for ticket
+ c2a19d81652f40568c.
+
+
+
Additional changes in version 3.9.1 (2015-10-16):
+
+
Fix the json1 extension so that it does not recognize ASCII form-feed as a
+ whitespace character, in order to comply with RFC-7159. Fix for ticket
+ 57eec374ae1d0a1d
+
Add a few #ifdef and build script changes to address compilation issues that
+ appeared after the 3.9.0 release.
+
+
+
Additional changes in version 3.9.2 (2015-11-02):
+
+
Fix the schema parser so that it interprets certain
+ (obscure and ill-formed)
+ CREATE TABLE statements the same as legacy. Fix for ticket
+ ac661962a2aeab3c331
+
Fix a query planner problem that could result in an incorrect
+ answer due to the use of automatic indexing in subqueries in
+ the FROM clause of a correlated scalar subqueries. Fix for ticket
+ 8a2adec1.
+
+
A VIEW may now reference undefined tables and functions when
+ initially created. Missing tables and functions are reported when
+ the VIEW is used in a query.
+
The query planner is now able to use partial indexes that contain
+ AND-connected terms in the WHERE clause.
+
The sqlite3_analyzer.exe utility is updated to report the depth of
+ each btree and to show the average fanout for indexes and
+ WITHOUT ROWID tables.
+
The sqlite3_memory_alarm() interface, which has been deprecated and
+ undocumented for 8 years, is changed into a no-op.
+
Important fixes:
+
Fixed a critical bug in the
+ SQLite Encryption Extension that
+ could cause the database to become unreadable and unrecoverable if a VACUUM command
+ changed the size of the encryption nonce.
+
Added a memory barrier in the implementation of
+ sqlite3_initialize() to help ensure that it is thread-safe.
+
Fix the OR optimization so that it always ignores subplans that
+ do not use an index.
+
Do not apply the WHERE-clause pushdown optimization on terms that originate
+ in the ON or USING clause of a LEFT JOIN. Fix for ticket
+ c2a19d81652f40568c.
+
+
+
Additional changes in version 3.9.1 (2015-10-16):
+
+
Fix the json1 extension so that it does not recognize ASCII form-feed as a
+ whitespace character, in order to comply with RFC-7159. Fix for ticket
+ 57eec374ae1d0a1d
+
Add a few #ifdef and build script changes to address compilation issues that
+ appeared after the 3.9.0 release.
+
+
+
Additional changes in version 3.9.2 (2015-11-02):
+
+
Fix the schema parser so that it interprets certain
+ (obscure and ill-formed)
+ CREATE TABLE statements the same as legacy. Fix for ticket
+ ac661962a2aeab3c331
+
Fix a query planner problem that could result in an incorrect
+ answer due to the use of automatic indexing in subqueries in
+ the FROM clause of a correlated scalar subqueries. Fix for ticket
+ 8a2adec1.
+
+
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.
+
Add the recovery extension that might be able to recover some content
+ from a corrupt database file.
+
Query planner enhancements:
+
+
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.
+
Extract the values of expressions contained within expression indexes
+ where practical, rather than recomputing the expression.
+
The NOT NULL and IS NULL operators (and their equivalents) avoid
+ loading the content of large strings and BLOB values from disk.
+
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.
+
Allow flattening of a subquery that is the right-hand operand of
+ a LEFT JOIN in an aggregate query.
+
+
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.
+
Security enhancement: SQLITE_DBCONFIG_DEFENSIVE is augmented to prohibit
+ changing the schema_version. The schema_version
+ becomes read-only in defensive mode.
+
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.
+
Provide the new SQLITE_MAX_ALLOCATION_SIZE compile-time option for limiting
+ the size of memory allocations.
+
Change the algorithm used by SQLite's built-in pseudo-random number generator (PRNG)
+ from RC4 to Chacha20.
+
Allow two or more indexes to have the same name as long as they are all in
+ separate schemas.
+
Miscellaneous performance optimizations result in about 1% fewer CPU cycles
+ used on typical workloads.
+
+
Additional changes in version 3.40.1 (2022-12-28):
+
+
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.
+
Fix a potential infinite loop in the memsys5 alternative memory allocator. This
+ bug was introduced by a performance optimization in version 3.39.0.
+