From: Aviv Palivoda Date: Sun, 9 Apr 2017 09:11:59 +0000 (+0300) Subject: bpo-26187: Test that set_trace_callback() is not called multiple times (GH-461) X-Git-Tag: v3.7.0a1~989 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0e6cb2ea624570ed08c354f1ed1f595dab4192d6;p=python bpo-26187: Test that set_trace_callback() is not called multiple times (GH-461) conn.set_trace_callback() shouldn't be called multiple times when the schema is changing. This has indirectly been fixed by using sqlite3_prepare_v2() in bpo-9303. --- diff --git a/Lib/sqlite3/test/hooks.py b/Lib/sqlite3/test/hooks.py index f8ef4d88f3..801a30cc34 100644 --- a/Lib/sqlite3/test/hooks.py +++ b/Lib/sqlite3/test/hooks.py @@ -24,6 +24,8 @@ import unittest import sqlite3 as sqlite +from test.support import TESTFN, unlink + class CollationTests(unittest.TestCase): def CheckCreateCollationNotString(self): con = sqlite.connect(":memory:") @@ -248,6 +250,24 @@ class TraceCallbackTests(unittest.TestCase): "Unicode data %s garbled in trace callback: %s" % (ascii(unicode_value), ', '.join(map(ascii, traced_statements)))) + @unittest.skipIf(sqlite.sqlite_version_info < (3, 3, 9), "sqlite3_prepare_v2 is not available") + def CheckTraceCallbackContent(self): + # set_trace_callback() shouldn't produce duplicate content (bpo-26187) + traced_statements = [] + def trace(statement): + traced_statements.append(statement) + + queries = ["create table foo(x)", + "insert into foo(x) values(1)"] + self.addCleanup(unlink, TESTFN) + con1 = sqlite.connect(TESTFN, isolation_level=None) + con2 = sqlite.connect(TESTFN) + con1.set_trace_callback(trace) + cur = con1.cursor() + cur.execute(queries[0]) + con2.execute("create table bar(x)") + cur.execute(queries[1]) + self.assertEqual(traced_statements, queries) def suite(): diff --git a/Misc/NEWS b/Misc/NEWS index 910488af2c..cc0a4d7593 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -307,6 +307,10 @@ Extension Modules Library ------- +- bpo-26187: Test that sqlite3 trace callback is not called multiple + times when schema is changing. Indirectly fixed by switching to + use sqlite3_prepare_v2() in bpo-9303. Patch by Aviv Palivoda. + - bpo-29998: Pickling and copying ImportError now preserves name and path attributes.