From 31bea2ac616f6c7a1ff6d1759558eb39ce335afb Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Mon, 7 Sep 2020 14:39:33 -0700 Subject: [PATCH] Test for with db.tracer() contextmanager --- sqlite_utils/db.py | 2 +- tests/test_tracer.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index d1cf03a..33d28c9 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -130,7 +130,7 @@ class Database: @contextlib.contextmanager def tracer(self, tracer=None): - prev_tracer = self.tracer + prev_tracer = self._tracer self._tracer = tracer or print try: yield self diff --git a/tests/test_tracer.py b/tests/test_tracer.py index 77c4e19..de3743a 100644 --- a/tests/test_tracer.py +++ b/tests/test_tracer.py @@ -31,3 +31,31 @@ def test_tracer(): ("Cleopaws",), ), ] + + +def test_with_tracer(): + collected = [] + tracer = lambda sql, params: collected.append((sql, params)) + + db = Database(memory=True) + + db["dogs"].insert({"name": "Cleopaws"}) + db["dogs"].enable_fts(["name"]) + + assert len(collected) == 0 + + with db.tracer(tracer): + db["dogs"].search("Cleopaws") + + assert len(collected) == 2 + assert collected == [ + ("select name from sqlite_master where type = 'view'", None), + ( + 'select * from "dogs" where rowid in (\n select rowid from [dogs_fts]\n where [dogs_fts] match :search\n)\norder by rowid', + ("Cleopaws",), + ), + ] + + # Outside the with block collected should not be appended to + db["dogs"].insert({"name": "Cleopaws"}) + assert len(collected) == 2