Skip to content

Commit

Permalink
Fixed #21452 -- Non-autocommit connections to PostgreSQL.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
aaugustin committed Jan 12, 2014
1 parent 1c24096 commit 1afe748
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
4 changes: 2 additions & 2 deletions django/db/backends/postgresql_psycopg2/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,11 +142,11 @@ def init_connection_state(self):
conn_tz = get_parameter_status('TimeZone')

if conn_tz != tz:
# Set the time zone in autocommit mode (see #17062)
self.set_autocommit(True)
self.connection.cursor().execute(
self.ops.set_time_zone_sql(), [tz]
)
# Commit after setting the time zone (see #17062)
self.connection.commit()
self.connection.set_isolation_level(self.isolation_level)

def create_cursor(self):
Expand Down
23 changes: 19 additions & 4 deletions tests/backends/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,10 +373,25 @@ def test_connect_and_rollback(self):
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
Expand Down

0 comments on commit 1afe748

Please sign in to comment.