master
Add the --enablefk option to the "changeset apply" command of the changeset program.
Fix harmless compiler warnings seen with MSVC.
Get rid of "-encoding binary" across all test cases, as that is no longer supported in Tcl9. Use "-translation binary" instead.
Add an explicit db close to fix a file-is-opened failure in session1.test in cygwin.
Add the SQLITE_CHANGESETAPPLY_IGNORENOOP flag, which may be passed to sqlite3changeset_apply_v2() to have it ignore changes that would be no-ops if applied to the database (e.g. deleting a row that has already been deleted), instead of considering them conflicts.
Allow a session object to generate a changeset, even if columns were added to one of the tables using ALTER TABLE ADD COLUMN while the changeset was being collected.
Fix trivial buffer overreads in the sessions module that could occur when parsing changeset blobs.
Change the names of the stream interface APIs to be of the form "_strm" instead of "_str". In other words, added an "m" to the end, to try to make it clear that we are talking about a "stream" and not a "string.
Fix the zeroblob() function and related APIs so that they work with SQLITE_OMIT_INCRBLOB builds.
Fix test cases so that they all still work even with -DSQLITE_DQS=0.
Fix a bug causing the session module to dereference a NULL pointer when applying a corrupt changeset.
Reformat the white-space in a few test cases so that the tests work with Tcl 8.6.9.
Fix a buffer overread in the session module that could occur when processing a corrupt changeset.
Fix a memory leak in sqlite3session_diff().
Add the SQLITE_DEFAULT_DEFENSIVE compile-time option. Fix up test cases so that they work with DEFENSIVE enabled.
Update the session module so that it can apply changesets containing two or more UPDATE changes that form a dependency loop - so that no single UPDATE can be applied independently without violating a constraint.
Add new sessions function sqlite3changeset_apply_v3() and its streaming equivalent. This allows changesets to be filtered on a per-change basis, not just per-table.
Fix sessions module handling of tables with generated columns.
Add a missing "db2 close" to the ext/session/session_gen.test test module.
Use 64-bit math to compute the sizes of memory allocations in extensions.
Fix the preupdate hook so that it works when the "old.*" row has a column with a non-NULL default value that was added by ALTER TABLE ADD COLUMN after the current record was created.
Fix both a buffer overread and overwrite in the sessions rebase module. Bug [bugs:/info/2026-06-26T12:16:48Z | 2026-06-26T12:16:48Z].
Avoid loading the entire record into memory for an sqlite3_preupdate_old() call that retrieves an IPK value.
Fix a problem with using streaming iterators with sqlite3changegroup_add_change().
Fix the sqlite3changegroup_change_finish() API so that it correctly handles NULL being passed for the pzErr parameter.
Add some explicit db close calls to work around a process-reaping timing problem on cygwin builds.
Add the SQLITE_CHANGESETAPPLY_NOUPDATELOOP option to the sqlite3_changeset_apply_v2/3() method. To disable the extra processing to commit changesets that swap two or more values subject to a UNIQUE constraint between rows.
Adjustments to test cases for session so that they work with Tcl9.
Fix problems with error handling when applying changesets with update loops.
Fix a potential 1-byte overread in sqlite3changeset_invert() when processing a corrupt buffer.
Add tests for sqlite3session_memory_used() interface.
Avoid returning an SQLITE_SCHEMA error from within sqlite3session_diff() if the schema has been recently modified. First <a href=https://sqlite.org/bugs/forumpost/269f1e9cef>reported here</a>.
Reinstate some test cases accidentally removed by [cb023fe28560ce0f].
Avoid attempting to delete a file that is still open in sessionnoop2.test.
Allow the sessions module to be configured to capture changes from tables with no explicit PRIMARY KEY.
Return an error if a patchset is passed to sqlite3rebaser_configure(). This was causing a buffer overread.
Fix windows-specific problems in test scripts sessionnoop2.test and sessionrowid.test.
If a table has one or more rows and it has a partial index has zero rows, still make an entry in the sqlite_stat1 table for the partial index, so that we know that "PRAGMA optimize" does not need to redo the whole table.
Ensure that the pre-update hook is invoked for INSERT operations on WITHOUT ROWID tables that use the xfer optimization.
Fix a problem introduced by [32c762bbb1] causing sessions module conflict handling to malfunction when used with a database handle configured with sqlite3_extended_result_codes(). Also ensure the "session_eec" permutation, which would have detected this, is run as part of release testing.