mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Separated autocommit and isolation level handling for PostgreSQL.
Autocommit cannot be manipulated independently from an open connection. This commit introduces a minor change in behavior: entering transaction management forces opening a databasse connection. This shouldn't be backwards incompatible in any practical use case.
This commit is contained in:
@@ -274,31 +274,39 @@ class TestPostgresAutocommitAndIsolation(TransactionTestCase):
|
||||
connections[DEFAULT_DB_ALIAS] = self._old_backend
|
||||
|
||||
def test_initial_autocommit_state(self):
|
||||
# Autocommit is activated when the connection is created.
|
||||
connection.cursor().close()
|
||||
|
||||
self.assertTrue(connection.features.uses_autocommit)
|
||||
self.assertEqual(connection.isolation_level, self._autocommit)
|
||||
self.assertTrue(connection.autocommit)
|
||||
|
||||
def test_transaction_management(self):
|
||||
transaction.enter_transaction_management()
|
||||
self.assertFalse(connection.autocommit)
|
||||
self.assertEqual(connection.isolation_level, self._serializable)
|
||||
|
||||
transaction.leave_transaction_management()
|
||||
self.assertEqual(connection.isolation_level, self._autocommit)
|
||||
self.assertTrue(connection.autocommit)
|
||||
|
||||
def test_transaction_stacking(self):
|
||||
transaction.enter_transaction_management()
|
||||
self.assertFalse(connection.autocommit)
|
||||
self.assertEqual(connection.isolation_level, self._serializable)
|
||||
|
||||
transaction.enter_transaction_management()
|
||||
self.assertFalse(connection.autocommit)
|
||||
self.assertEqual(connection.isolation_level, self._serializable)
|
||||
|
||||
transaction.leave_transaction_management()
|
||||
self.assertFalse(connection.autocommit)
|
||||
self.assertEqual(connection.isolation_level, self._serializable)
|
||||
|
||||
transaction.leave_transaction_management()
|
||||
self.assertEqual(connection.isolation_level, self._autocommit)
|
||||
self.assertTrue(connection.autocommit)
|
||||
|
||||
def test_enter_autocommit(self):
|
||||
transaction.enter_transaction_management()
|
||||
self.assertFalse(connection.autocommit)
|
||||
self.assertEqual(connection.isolation_level, self._serializable)
|
||||
list(Mod.objects.all())
|
||||
self.assertTrue(transaction.is_dirty())
|
||||
@@ -311,9 +319,10 @@ class TestPostgresAutocommitAndIsolation(TransactionTestCase):
|
||||
list(Mod.objects.all())
|
||||
self.assertFalse(transaction.is_dirty())
|
||||
transaction.leave_transaction_management()
|
||||
self.assertFalse(connection.autocommit)
|
||||
self.assertEqual(connection.isolation_level, self._serializable)
|
||||
transaction.leave_transaction_management()
|
||||
self.assertEqual(connection.isolation_level, self._autocommit)
|
||||
self.assertTrue(connection.autocommit)
|
||||
|
||||
|
||||
class TestManyToManyAddTransaction(TransactionTestCase):
|
||||
|
||||
Reference in New Issue
Block a user