Fixed #27504 -- Allowed using the ORM after an error and rollback when autocommit is off.

This commit is contained in:
Mark Young 2016-11-23 08:42:19 -05:00 committed by Tim Graham
parent b5ef90192f
commit 2742901ac2
2 changed files with 23 additions and 3 deletions

View File

@ -267,7 +267,7 @@ class BaseDatabaseWrapper(object):
self._rollback() self._rollback()
# A successful rollback means that the database connection works. # A successful rollback means that the database connection works.
self.errors_occurred = False self.errors_occurred = False
self.needs_rollback = False
self.run_on_commit = [] self.run_on_commit = []
def close(self): def close(self):

View File

@ -443,8 +443,28 @@ class AtomicMiscTests(TransactionTestCase):
# This is expected to fail because the savepoint no longer exists. # This is expected to fail because the savepoint no longer exists.
connection.savepoint_rollback(sid) connection.savepoint_rollback(sid)
@skipIf(connection.features.autocommits_when_autocommit_is_off,
"This test requires a non-autocommit mode that doesn't autocommit.") @skipIf(
connection.features.autocommits_when_autocommit_is_off,
"This test requires a non-autocommit mode that doesn't autocommit."
)
class NonAutocommitTests(TransactionTestCase):
available_apps = []
def test_orm_query_after_error_and_rollback(self):
"""
ORM queries are allowed after an error and a rollback in non-autocommit
mode (#27504).
"""
transaction.set_autocommit(False)
r1 = Reporter.objects.create(first_name='Archibald', last_name='Haddock')
r2 = Reporter(first_name='Cuthbert', last_name='Calculus', id=r1.id)
with self.assertRaises(IntegrityError):
r2.save(force_insert=True)
transaction.rollback()
Reporter.objects.last()
def test_orm_query_without_autocommit(self): def test_orm_query_without_autocommit(self):
"""#24921 -- ORM queries must be possible after set_autocommit(False).""" """#24921 -- ORM queries must be possible after set_autocommit(False)."""
transaction.set_autocommit(False) transaction.set_autocommit(False)