summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Fedoseev <fedoseev.sergey@gmail.com>2017-11-15 01:40:44 +0500
committerTim Graham <timograham@gmail.com>2017-11-14 15:42:16 -0500
commit5638b77627a6b733fae5ab0dbf1b5c3425461d56 (patch)
tree40c140f53d66ca07b8febda79cee4a704fed0eac
parent3f372ef9d3a646a5c50599c001e472be074b5833 (diff)
downloaddjango-5638b77627a6b733fae5ab0dbf1b5c3425461d56.tar.gz
[2.0.x] Fixed #28794 -- Fixed tx_isolation deprecation warning on MySQL 5.7.20+.
Backport of 967450a3bf940c43db891fe1e2ef3bcf73456ff8 from master
-rw-r--r--django/db/backends/mysql/base.py8
-rw-r--r--tests/backends/mysql/tests.py2
2 files changed, 7 insertions, 3 deletions
diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py
index f4bad47e06..7690629209 100644
--- a/django/db/backends/mysql/base.py
+++ b/django/db/backends/mysql/base.py
@@ -229,7 +229,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
', '.join("'%s'" % s for s in sorted(self.isolation_levels))
))
# The variable assignment form of setting transaction isolation
- # levels will be used, e.g. "set tx_isolation='repeatable-read'".
+ # levels will be used, e.g. "set transaction_isolation='repeatable-read'".
isolation_level = isolation_level.replace(' ', '-')
self.isolation_level = isolation_level
kwargs.update(options)
@@ -238,6 +238,10 @@ class DatabaseWrapper(BaseDatabaseWrapper):
def get_new_connection(self, conn_params):
return Database.connect(**conn_params)
+ @cached_property
+ def transaction_isolation_variable(self):
+ return 'tx_isolation' if self.mysql_version < (5, 7, 20) else 'transaction_isolation'
+
def init_connection_state(self):
assignments = []
if self.features.is_sql_auto_is_null_enabled:
@@ -248,7 +252,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
assignments.append('SQL_AUTO_IS_NULL = 0')
if self.isolation_level:
- assignments.append("TX_ISOLATION = '%s'" % self.isolation_level)
+ assignments.append("%s = '%s'" % (self.transaction_isolation_variable, self.isolation_level))
if assignments:
with self.cursor() as cursor:
diff --git a/tests/backends/mysql/tests.py b/tests/backends/mysql/tests.py
index c9d47eb012..467cd5abc5 100644
--- a/tests/backends/mysql/tests.py
+++ b/tests/backends/mysql/tests.py
@@ -38,7 +38,7 @@ class IsolationLevelTests(TestCase):
@staticmethod
def get_isolation_level(connection):
with connection.cursor() as cursor:
- cursor.execute("SELECT @@session.tx_isolation")
+ cursor.execute("SELECT @@session.%s" % connection.transaction_isolation_variable)
return cursor.fetchone()[0]
def test_auto_is_null_auto_config(self):