From cb4a000adbb750da62daab318a9f4da8e3d4fdcd Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Sun, 12 Jan 2014 18:26:20 +0100 Subject: [1.6.x] Fixed #21452 -- Non-autocommit connections to PostgreSQL. When settings.DATABASES['default']['AUTOCOMMIT'] = False, the connection wasn't in autocommit mode but Django pretended it was. Thanks Anssi for analysing this issue. Refs #17062. Backport of 1afe7488 from master --- tests/backends/tests.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/backends/tests.py b/tests/backends/tests.py index be0c3a418f..90794a5472 100644 --- a/tests/backends/tests.py +++ b/tests/backends/tests.py @@ -352,10 +352,25 @@ class PostgresNewConnectionTests(TestCase): tz = cursor.fetchone()[0] self.assertEqual(new_tz, tz) finally: - try: - new_connection.close() - except DatabaseError: - pass + new_connection.close() + + @unittest.skipUnless( + connection.vendor == 'postgresql', + "This test applies only to PostgreSQL") + def test_connect_non_autocommit(self): + """ + The connection wrapper shouldn't believe that autocommit is enabled + after setting the time zone when AUTOCOMMIT is False (#21452). + """ + databases = copy.deepcopy(settings.DATABASES) + new_connections = ConnectionHandler(databases) + new_connection = new_connections[DEFAULT_DB_ALIAS] + try: + new_connection.settings_dict['AUTOCOMMIT'] = False + cursor = new_connection.cursor() + self.assertFalse(new_connection.get_autocommit()) + finally: + new_connection.close() # This test needs to run outside of a transaction, otherwise closing the -- cgit v1.3