aboutsummaryrefslogtreecommitdiff
path: root/ext/session
diff options
context:
space:
mode:
authordan <Dan Kennedy>2025-03-24 11:13:18 +0000
committerdan <Dan Kennedy>2025-03-24 11:13:18 +0000
commit1b906dd920ba2fb12fe686782313fa1c40231c36 (patch)
tree8cc1780361c282d3754b795e04e44be8afa1c12f /ext/session
parent49a015092e0cef820ec0d94d571726c8d939449d (diff)
downloadsqlite-1b906dd920ba2fb12fe686782313fa1c40231c36.tar.gz
sqlite-1b906dd920ba2fb12fe686782313fa1c40231c36.zip
Add test cases to session1.test.
FossilOrigin-Name: dda9d7cf319e74de7703bda1eb77e3e7aa7459d6fa1508cc1d62cdfc7985c368
Diffstat (limited to 'ext/session')
-rw-r--r--ext/session/session1.test68
1 files changed, 68 insertions, 0 deletions
diff --git a/ext/session/session1.test b/ext/session/session1.test
index 6da905179..3262c9bc4 100644
--- a/ext/session/session1.test
+++ b/ext/session/session1.test
@@ -684,6 +684,74 @@ do_test $tn.14.4 {
list [catch {sqlite3session_config invalid 123} msg] $msg
} {1 SQLITE_MISUSE}
+#-------------------------------------------------------------------------
+reset_db
+
+do_execsql_test $tn.15.0 {
+ 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;
+
+ CREATE VIEW data_view AS
+ SELECT *, '=' AS op, '$' AS path FROM records
+ WHERE tbl = 'data';
+
+ CREATE TRIGGER data_insert
+ INSTEAD OF INSERT ON data_view
+ BEGIN
+ INSERT INTO changes(tbl, pk, op, path, value)
+ VALUES (NEW.tbl, NEW.pk, NEW.op, NEW.path, NEW.value);
+ END;
+
+ CREATE TRIGGER data_update
+ INSTEAD OF UPDATE ON data_view
+ BEGIN
+ INSERT INTO changes(tbl, pk, op, path, value)
+ VALUES (NEW.tbl, NEW.pk, NEW.op, NEW.path, NEW.value);
+ END;
+
+ CREATE TRIGGER data_delete
+ INSTEAD OF DELETE ON data_view
+ BEGIN
+ INSERT INTO changes(tbl, pk, op, path, value)
+ VALUES (NEW.tbl, NEW.pk, NEW.op, NEW.path, NEW.value);
+ END;
+}
+
+do_iterator_test $tn.15.1 * {
+ 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}}
+}
+
}]
}