Fixed #21453 -- Enabled autocommit before calling init_connection_state.
Also ensured the transaction state is clean on Oracle while I was there. This change cannot be backported to 1.6 because it's backwards-incompatible for custom database backends.
This commit is contained in:
parent
cc0d85660b
commit
8ac63d63ca
|
@ -110,9 +110,8 @@ class BaseDatabaseWrapper(object):
|
|||
# Establish the connection
|
||||
conn_params = self.get_connection_params()
|
||||
self.connection = self.get_new_connection(conn_params)
|
||||
self.set_autocommit(self.settings_dict['AUTOCOMMIT'])
|
||||
self.init_connection_state()
|
||||
if self.settings_dict['AUTOCOMMIT']:
|
||||
self.set_autocommit(True)
|
||||
connection_created.send(sender=self.__class__, connection=self)
|
||||
|
||||
def ensure_connection(self):
|
||||
|
|
|
@ -627,6 +627,9 @@ class DatabaseWrapper(BaseDatabaseWrapper):
|
|||
# Django docs specify cx_Oracle version 4.3.1 or higher, but
|
||||
# stmtcachesize is available only in 4.3.2 and up.
|
||||
pass
|
||||
# Ensure all changes are preserved even when AUTOCOMMIT is False.
|
||||
if not self.get_autocommit():
|
||||
self.commit()
|
||||
|
||||
def create_cursor(self):
|
||||
return FormatStylePlaceholderCursor(self.connection)
|
||||
|
|
|
@ -148,12 +148,12 @@ class DatabaseWrapper(BaseDatabaseWrapper):
|
|||
conn_tz = get_parameter_status('TimeZone')
|
||||
|
||||
if conn_tz != tz:
|
||||
self.connection.cursor().execute(
|
||||
self.ops.set_time_zone_sql(), [tz]
|
||||
)
|
||||
cursor = self.connection.cursor()
|
||||
cursor.execute(self.ops.set_time_zone_sql(), [tz])
|
||||
cursor.close()
|
||||
# Commit after setting the time zone (see #17062)
|
||||
self.connection.commit()
|
||||
self.connection.set_isolation_level(self.isolation_level)
|
||||
if not self.get_autocommit():
|
||||
self.connection.commit()
|
||||
|
||||
def create_cursor(self):
|
||||
cursor = self.connection.cursor()
|
||||
|
|
|
@ -920,6 +920,11 @@ Miscellaneous
|
|||
|
||||
* GeoDjango dropped support for GEOS < 3.1.
|
||||
|
||||
* The ``init_connection_state`` method of database backends now executes in
|
||||
autocommit mode (unless you set :setting:`AUTOCOMMIT <DATABASE-AUTOCOMMIT>`
|
||||
to ``False``). If you maintain a custom database backend, you should check
|
||||
that method.
|
||||
|
||||
Features deprecated in 1.7
|
||||
==========================
|
||||
|
||||
|
|
Loading…
Reference in New Issue