diff options
author | dan <Dan Kennedy> | 2023-10-20 17:06:39 +0000 |
---|---|---|
committer | dan <Dan Kennedy> | 2023-10-20 17:06:39 +0000 |
commit | 17c3408e0eb1fd8cac354af525a24edda47ffe2c (patch) | |
tree | aedfd4bdce93d47acb8113d5117db18ab1d69527 /ext/session/sqlite3session.c | |
parent | 90e4a3b7fcdf63035d6f35eb44d11ff58ff4b068 (diff) | |
download | sqlite-17c3408e0eb1fd8cac354af525a24edda47ffe2c.tar.gz sqlite-17c3408e0eb1fd8cac354af525a24edda47ffe2c.zip |
Add the SQLITE_CHANGESETAPPLY_FKNOACTION flag to sqlite3session.h, for passing to sqlite3changeset_apply_v2() to cause all foreign key constraints to behave as if they were declared NO ACTION.
FossilOrigin-Name: fc9f82ea084159eaf3dd1757b96d17d1201b00c4e06455a7dcd8067172b25f28
Diffstat (limited to 'ext/session/sqlite3session.c')
-rw-r--r-- | ext/session/sqlite3session.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index 7ae407154..bf3f1390d 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -5322,11 +5322,22 @@ int sqlite3changeset_apply_v2( sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */ int bInv = !!(flags & SQLITE_CHANGESETAPPLY_INVERT); int rc = sessionChangesetStart(&pIter, 0, 0, nChangeset, pChangeset, bInv, 1); + u64 savedFlag = db->flags & SQLITE_FkNoAction; + + if( flags & SQLITE_CHANGESETAPPLY_FKNOACTION ){ + db->flags |= ((u64)SQLITE_FkNoAction); + } + if( rc==SQLITE_OK ){ rc = sessionChangesetApply( db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase, flags ); } + + if( (flags & SQLITE_CHANGESETAPPLY_FKNOACTION) && savedFlag==0 ){ + assert( db->flags & SQLITE_FkNoAction ); + db->flags &= ((u64)SQLITE_FkNoAction); + } return rc; } |