diff options
author | dan <Dan Kennedy> | 2025-04-08 17:18:01 +0000 |
---|---|---|
committer | dan <Dan Kennedy> | 2025-04-08 17:18:01 +0000 |
commit | de93449908e8d7b82517f4ccef7886a1a68d1019 (patch) | |
tree | 9b8f2c5ba6daf58c87f7fc6b2de61ec28a06e88b /ext | |
parent | f72c2fd19e9d20e2035d3e0b000fb9a37881734d (diff) | |
parent | 6864f78fdf9d112d478763bd24c0684a39362a84 (diff) | |
download | sqlite-de93449908e8d7b82517f4ccef7886a1a68d1019.tar.gz sqlite-de93449908e8d7b82517f4ccef7886a1a68d1019.zip |
Have sqlite3session_diff() automatically attach tables to session objects, as it has always been documented to do.
FossilOrigin-Name: 99827144f112303e27a829c990b1858d227bd7369095100a435c367637985fad
Diffstat (limited to 'ext')
-rw-r--r-- | ext/session/sessionD.test | 28 | ||||
-rw-r--r-- | ext/session/sqlite3session.c | 2 |
2 files changed, 30 insertions, 0 deletions
diff --git a/ext/session/sessionD.test b/ext/session/sessionD.test index 9fccbfa96..f60fbabc2 100644 --- a/ext/session/sessionD.test +++ b/ext/session/sessionD.test @@ -230,4 +230,32 @@ do_catchsql_test 4.5.2 { SELECT * FROM ixua.i8; } {1 {no such table: ixua.i8}} +#------------------------------------------------------------------------- +# Test that sqlite3session_diff() really does automatically attach tables, +# as documented. +# +reset_db +forcedelete test.db2 +do_execsql_test 4.0 { + ATTACH 'test.db2' AS two; + CREATE TABLE two.t1(a PRIMARY KEY, b, c); + CREATE TABLE t1(a PRIMARY KEY, b, c); + + INSERT INTO two.t1 VALUES(1, 2, 3), (4, 5, 6), (7, 8, 9); +} + +do_test 4.1 { + sqlite3session S db main + S attach t8 + S diff two t1 +} {} + +do_changeset_test 4.2 S { + {DELETE t1 0 X.. {i 1 i 2 i 3} {}} + {DELETE t1 0 X.. {i 4 i 5 i 6} {}} + {DELETE t1 0 X.. {i 7 i 8 i 9} {}} +} + +S delete + finish_test diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index 7d6f21255..6c386f42e 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -2216,7 +2216,9 @@ int sqlite3session_diff( SessionTable *pTo; /* Table zTbl */ /* Locate and if necessary initialize the target table object */ + pSession->bAutoAttach++; rc = sessionFindTable(pSession, zTbl, &pTo); + pSession->bAutoAttach--; if( pTo==0 ) goto diff_out; if( sessionInitTable(pSession, pTo, pSession->db, pSession->zDb) ){ rc = pSession->rc; |