[Python-checkins] cpython (3.5): Issue #10513: Fix a regression in Connection.commit()
berker.peksag
python-checkins at python.org
Fri Aug 26 15:07:35 EDT 2016
https://hg.python.org/cpython/rev/81f614dd8136
changeset: 102917:81f614dd8136
branch: 3.5
parent: 102915:579360b1c8fe
user: Berker Peksag <berker.peksag at gmail.com>
date: Fri Aug 26 22:07:51 2016 +0300
summary:
Issue #10513: Fix a regression in Connection.commit()
Statements should not be reset after a commit.
Backported from https://github.com/ghaering/pysqlite/commit/029050896b1e6058573abeef5a8970384c0c7faa
files:
Lib/sqlite3/test/regression.py | 31 ++++++++++++++++++++++
Misc/NEWS | 3 ++
Modules/_sqlite/connection.c | 1 -
3 files changed, 34 insertions(+), 1 deletions(-)
diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py
--- a/Lib/sqlite3/test/regression.py
+++ b/Lib/sqlite3/test/regression.py
@@ -322,6 +322,37 @@
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")
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -50,6 +50,9 @@
Library
-------
+- Issue #10513: Fix a regression in Connection.commit(). Statements should
+ not be reset after a commit.
+
- A new version of typing.py from https://github.com/python/typing:
- Collection (only for 3.6) (Issue #27598)
- Add FrozenSet to __all__ (upstream #261)
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -426,7 +426,6 @@
}
if (self->inTransaction) {
- pysqlite_do_all_statements(self, ACTION_RESET, 0);
Py_BEGIN_ALLOW_THREADS
rc = sqlite3_prepare(self->db, "COMMIT", -1, &statement, &tail);
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list