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.
This commit is contained in:
Aviv Palivoda 2017-04-09 12:11:59 +03:00 committed by Berker Peksag
parent 2abfdf5a81
commit 0e6cb2ea62
2 changed files with 24 additions and 0 deletions

View File

@ -24,6 +24,8 @@
import unittest import unittest
import sqlite3 as sqlite import sqlite3 as sqlite
from test.support import TESTFN, unlink
class CollationTests(unittest.TestCase): class CollationTests(unittest.TestCase):
def CheckCreateCollationNotString(self): def CheckCreateCollationNotString(self):
con = sqlite.connect(":memory:") con = sqlite.connect(":memory:")
@ -248,6 +250,24 @@ class TraceCallbackTests(unittest.TestCase):
"Unicode data %s garbled in trace callback: %s" "Unicode data %s garbled in trace callback: %s"
% (ascii(unicode_value), ', '.join(map(ascii, traced_statements)))) % (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(): def suite():

View File

@ -307,6 +307,10 @@ Extension Modules
Library 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 - bpo-29998: Pickling and copying ImportError now preserves name and path
attributes. attributes.