aboutsummaryrefslogtreecommitdiff
path: root/ext/session
diff options
context:
space:
mode:
authordan <Dan Kennedy>2025-03-24 19:58:13 +0000
committerdan <Dan Kennedy>2025-03-24 19:58:13 +0000
commite6e453def6fc09432a734c82c96f185ed0924bae (patch)
tree2b84acc02c8ba3577b313126c126d28a20299d2e /ext/session
parent1b906dd920ba2fb12fe686782313fa1c40231c36 (diff)
downloadsqlite-e6e453def6fc09432a734c82c96f185ed0924bae.tar.gz
sqlite-e6e453def6fc09432a734c82c96f185ed0924bae.zip
Test that the sqlite3changeset_apply() function is properly appling indirect changes.
FossilOrigin-Name: 1dadea3a79c3edd110b0b32b07287744300958fed31f2da11901a42b16f86669
Diffstat (limited to 'ext/session')
-rw-r--r--ext/session/session1.test62
1 files changed, 55 insertions, 7 deletions
diff --git a/ext/session/session1.test b/ext/session/session1.test
index 3262c9bc4..27ac0a194 100644
--- a/ext/session/session1.test
+++ b/ext/session/session1.test
@@ -741,16 +741,64 @@ do_execsql_test $tn.15.0 {
END;
}
-do_iterator_test $tn.15.1 * {
+do_test $tn.15.1 {
+ set C [changeset_from_sql {
INSERT INTO data_view (tbl, pk, value) VALUES
('data', '1', 'First'),
('data', '2', 'Second');
-} {
- {INSERT changes 1 X..... {} {i 1 t data t 1 n {} n {} t First}}
- {INSERT changes 1 X..... {} {i 2 t data t 2 n {} n {} t Second}}
- {INSERT records 1 X... {} {i 1 t data t 1 t First}}
- {INSERT records 1 X... {} {i 2 t data t 2 t Second}}
-}
+ }]
+ changeset_to_list $C
+} [list \
+ {INSERT changes 1 X..... {} {i 1 t data t 1 n {} n {} t First}} \
+ {INSERT changes 1 X..... {} {i 2 t data t 2 n {} n {} t Second}} \
+ {INSERT records 1 X... {} {i 1 t data t 1 t First}} \
+ {INSERT records 1 X... {} {i 2 t data t 2 t Second}} \
+]
+
+forcedelete test.db2
+sqlite3 db2 test.db2
+
+do_test $tn.15.2 {
+ db2 eval {
+ CREATE TABLE records(
+ idx INTEGER PRIMARY KEY AUTOINCREMENT,
+ tbl TEXT NOT NULL,
+ pk TEXT NOT NULL,
+ value TEXT,
+ UNIQUE(tbl, pk)
+ );
+ CREATE TABLE changes(
+ idx INTEGER PRIMARY KEY AUTOINCREMENT,
+ tbl TEXT NOT NULL,
+ pk TEXT NOT NULL,
+ op TEXT DEFAULT ('='),
+ path TEXT DEFAULT ('$'),
+ value TEXT,
+ UNIQUE(tbl, pk)
+ );
+
+ CREATE TRIGGER changes_after_insert
+ AFTER INSERT ON changes
+ FOR EACH ROW
+ BEGIN
+ INSERT INTO records(tbl, pk, value)
+ VALUES (NEW.tbl, NEW.pk, NEW.value)
+ ON CONFLICT(tbl, pk) DO UPDATE SET value = NEW.value;
+ END;
+ }
+
+ sqlite3changeset_apply db2 $C ""
+
+ db2 eval {
+ SELECT * FROM records;
+ }
+} [list 1 data 1 First 2 data 2 Second]
+
+do_test $tn.15.3 {
+ db2 eval {
+ SELECT * FROM changes;
+ }
+} {1 data 1 {} {} First 2 data 2 {} {} Second}
}]
}