Loading django/db/backends/mysql/base.py +7 −6 Original line number Diff line number Diff line Loading @@ -267,11 +267,12 @@ class DatabaseWrapper(BaseDatabaseWrapper): return conn def init_connection_state(self): if self.features.is_sql_auto_is_null_enabled: 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. # 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): Loading django/db/backends/mysql/features.py +6 −0 Original line number Diff line number Diff line Loading @@ -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 tests/backends/test_mysql.py 0 → 100644 +20 −0 Original line number Diff line number Diff line 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) Loading
django/db/backends/mysql/base.py +7 −6 Original line number Diff line number Diff line Loading @@ -267,11 +267,12 @@ class DatabaseWrapper(BaseDatabaseWrapper): return conn def init_connection_state(self): if self.features.is_sql_auto_is_null_enabled: 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. # 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): Loading
django/db/backends/mysql/features.py +6 −0 Original line number Diff line number Diff line Loading @@ -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
tests/backends/test_mysql.py 0 → 100644 +20 −0 Original line number Diff line number Diff line 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)