public void test_hooks() { using (sqlite3 db = ugly.open(":memory:")) { work w = new work(); Assert.AreEqual(w.count_commits, 0); Assert.AreEqual(w.count_rollbacks, 0); Assert.AreEqual(w.count_updates, 0); Assert.AreEqual(w.count_traces, 0); Assert.AreEqual(w.count_profiles, 0); db.commit_hook(my_commit_hook, w); db.rollback_hook(my_rollback_hook, w); db.update_hook(my_update_hook, w); db.trace(my_trace_hook, w); db.profile(my_profile_hook, w); GC.Collect(); db.exec("CREATE TABLE foo (x int);"); Assert.AreEqual(w.count_commits, 1); Assert.AreEqual(w.count_rollbacks, 0); Assert.AreEqual(w.count_updates, 0); Assert.AreEqual(w.count_traces, 1); Assert.AreEqual(w.count_profiles, 1); db.exec("INSERT INTO foo (x) VALUES (1);"); Assert.AreEqual(w.count_commits, 2); Assert.AreEqual(w.count_rollbacks, 0); Assert.AreEqual(w.count_updates, 1); Assert.AreEqual(w.count_traces, 2); Assert.AreEqual(w.count_profiles, 2); db.exec("BEGIN TRANSACTION;"); Assert.AreEqual(w.count_commits, 2); Assert.AreEqual(w.count_rollbacks, 0); Assert.AreEqual(w.count_updates, 1); Assert.AreEqual(w.count_traces, 3); Assert.AreEqual(w.count_profiles, 3); db.exec("INSERT INTO foo (x) VALUES (2);"); Assert.AreEqual(w.count_commits, 2); Assert.AreEqual(w.count_rollbacks, 0); Assert.AreEqual(w.count_updates, 2); Assert.AreEqual(w.count_traces, 4); Assert.AreEqual(w.count_profiles, 4); db.exec("ROLLBACK TRANSACTION;"); Assert.AreEqual(w.count_commits, 2); Assert.AreEqual(w.count_rollbacks, 1); Assert.AreEqual(w.count_updates, 2); Assert.AreEqual(w.count_traces, 5); Assert.AreEqual(w.count_profiles, 5); } }