diff options
author | dan <Dan Kennedy> | 2025-03-24 19:58:13 +0000 |
---|---|---|
committer | dan <Dan Kennedy> | 2025-03-24 19:58:13 +0000 |
commit | e6e453def6fc09432a734c82c96f185ed0924bae (patch) | |
tree | 2b84acc02c8ba3577b313126c126d28a20299d2e /ext/session | |
parent | 1b906dd920ba2fb12fe686782313fa1c40231c36 (diff) | |
download | sqlite-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.test | 62 |
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} }] } |