|
|
|
@ -322,6 +322,37 @@ class RegressionTests(unittest.TestCase): |
|
|
|
self.assertRaises(ValueError, cur.execute, " \0select 2") |
|
|
|
self.assertRaises(ValueError, cur.execute, "select 2\0") |
|
|
|
|
|
|
|
def CheckCommitCursorReset(self): |
|
|
|
""" |
|
|
|
Connection.commit() did reset cursors, which made sqlite3 |
|
|
|
to return rows multiple times when fetched from cursors |
|
|
|
after commit. See issues 10513 and 23129 for details. |
|
|
|
""" |
|
|
|
con = sqlite.connect(":memory:") |
|
|
|
con.executescript(""" |
|
|
|
create table t(c); |
|
|
|
create table t2(c); |
|
|
|
insert into t values(0); |
|
|
|
insert into t values(1); |
|
|
|
insert into t values(2); |
|
|
|
""") |
|
|
|
|
|
|
|
self.assertEqual(con.isolation_level, "") |
|
|
|
|
|
|
|
counter = 0 |
|
|
|
for i, row in enumerate(con.execute("select c from t")): |
|
|
|
with self.subTest(i=i, row=row): |
|
|
|
con.execute("insert into t2(c) values (?)", (i,)) |
|
|
|
con.commit() |
|
|
|
if counter == 0: |
|
|
|
self.assertEqual(row[0], 0) |
|
|
|
elif counter == 1: |
|
|
|
self.assertEqual(row[0], 1) |
|
|
|
elif counter == 2: |
|
|
|
self.assertEqual(row[0], 2) |
|
|
|
counter += 1 |
|
|
|
self.assertEqual(counter, 3, "should have returned exactly three rows") |
|
|
|
|
|
|
|
|
|
|
|
def suite(): |
|
|
|
regression_suite = unittest.makeSuite(RegressionTests, "Check") |
|
|
|
|