|
24 | 24 | import unittest
|
25 | 25 | import sqlite3 as sqlite
|
26 | 26 |
|
| 27 | +from test.support import TESTFN, unlink |
| 28 | + |
27 | 29 | class CollationTests(unittest.TestCase):
|
28 | 30 | def CheckCreateCollationNotString(self):
|
29 | 31 | con = sqlite.connect(":memory:")
|
@@ -248,6 +250,24 @@ def trace(statement):
|
248 | 250 | "Unicode data %s garbled in trace callback: %s"
|
249 | 251 | % (ascii(unicode_value), ', '.join(map(ascii, traced_statements))))
|
250 | 252 |
|
| 253 | + @unittest.skipIf(sqlite.sqlite_version_info < (3, 3, 9), "sqlite3_prepare_v2 is not available") |
| 254 | + def CheckTraceCallbackContent(self): |
| 255 | + # set_trace_callback() shouldn't produce duplicate content (bpo-26187) |
| 256 | + traced_statements = [] |
| 257 | + def trace(statement): |
| 258 | + traced_statements.append(statement) |
| 259 | + |
| 260 | + queries = ["create table foo(x)", |
| 261 | + "insert into foo(x) values(1)"] |
| 262 | + self.addCleanup(unlink, TESTFN) |
| 263 | + con1 = sqlite.connect(TESTFN, isolation_level=None) |
| 264 | + con2 = sqlite.connect(TESTFN) |
| 265 | + con1.set_trace_callback(trace) |
| 266 | + cur = con1.cursor() |
| 267 | + cur.execute(queries[0]) |
| 268 | + con2.execute("create table bar(x)") |
| 269 | + cur.execute(queries[1]) |
| 270 | + self.assertEqual(traced_statements, queries) |
251 | 271 |
|
252 | 272 |
|
253 | 273 | def suite():
|
|
0 commit comments