import unittest
import sqlite3 as sqlite
+from test.support import TESTFN, unlink
+
class CollationTests(unittest.TestCase):
def CheckCreateCollationNotString(self):
con = sqlite.connect(":memory:")
"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():
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.