summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/backends/mysql/base.py13
-rw-r--r--django/db/backends/mysql/features.py6
-rw-r--r--tests/backends/test_mysql.py20
3 files changed, 33 insertions, 6 deletions
diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py
index 03f3857664..6fbf15e42e 100644
--- a/django/db/backends/mysql/base.py
+++ b/django/db/backends/mysql/base.py
@@ -267,12 +267,13 @@ class DatabaseWrapper(BaseDatabaseWrapper):
return conn
def init_connection_state(self):
- with self.cursor() as cursor:
- # SQL_AUTO_IS_NULL in MySQL controls whether an AUTO_INCREMENT column
- # on a recently-inserted row will return when the field is tested for
- # NULL. Disabling this value brings this aspect of MySQL in line with
- # SQL standards.
- cursor.execute('SET SQL_AUTO_IS_NULL = 0')
+ if self.features.is_sql_auto_is_null_enabled:
+ with self.cursor() as cursor:
+ # SQL_AUTO_IS_NULL controls whether an AUTO_INCREMENT column on
+ # a recently inserted row will return when the field is tested
+ # for NULL. Disabling this brings this aspect of MySQL in line
+ # with SQL standards.
+ cursor.execute('SET SQL_AUTO_IS_NULL = 0')
def create_cursor(self):
cursor = self.connection.cursor()
diff --git a/django/db/backends/mysql/features.py b/django/db/backends/mysql/features.py
index c8ea8f7fb6..075b68a872 100644
--- a/django/db/backends/mysql/features.py
+++ b/django/db/backends/mysql/features.py
@@ -69,3 +69,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
def introspected_boolean_field_type(self, *args, **kwargs):
return 'IntegerField'
+
+ @cached_property
+ def is_sql_auto_is_null_enabled(self):
+ with self.connection.cursor() as cursor:
+ cursor.execute('SELECT @@SQL_AUTO_IS_NULL')
+ return cursor.fetchone()[0] == 1
diff --git a/tests/backends/test_mysql.py b/tests/backends/test_mysql.py
new file mode 100644
index 0000000000..d667a7c89c
--- /dev/null
+++ b/tests/backends/test_mysql.py
@@ -0,0 +1,20 @@
+from __future__ import unicode_literals
+
+import unittest
+
+from django.db import connection
+from django.test import TestCase, override_settings
+
+
+@override_settings(DEBUG=True)
+@unittest.skipUnless(connection.vendor == 'mysql', 'MySQL specific test.')
+class MySQLTests(TestCase):
+
+ def test_auto_is_null_auto_config(self):
+ query = 'set sql_auto_is_null = 0'
+ connection.init_connection_state()
+ last_query = connection.queries[-1]['sql'].lower()
+ if connection.features.is_sql_auto_is_null_enabled:
+ self.assertIn(query, last_query)
+ else:
+ self.assertNotIn(query, last_query)