Beispiel #1
0
        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);
            }
        }