aboutsummaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authordan <Dan Kennedy>2025-04-08 17:18:01 +0000
committerdan <Dan Kennedy>2025-04-08 17:18:01 +0000
commitde93449908e8d7b82517f4ccef7886a1a68d1019 (patch)
tree9b8f2c5ba6daf58c87f7fc6b2de61ec28a06e88b /ext
parentf72c2fd19e9d20e2035d3e0b000fb9a37881734d (diff)
parent6864f78fdf9d112d478763bd24c0684a39362a84 (diff)
downloadsqlite-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.test28
-rw-r--r--ext/session/sqlite3session.c2
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;