1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Test that the sqlite3changeset_apply() function is properly appling indirect changes.

FossilOrigin-Name: 1dadea3a79c3edd110b0b32b07287744300958fed31f2da11901a42b16f86669
This commit is contained in:
dan
2025-03-24 19:58:13 +00:00
parent 1b906dd920
commit e6e453def6
3 changed files with 62 additions and 14 deletions

View File

@ -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}
}]
}