mirror of https://github.com/django/django.git
[1.8.x] Fixed #25393 -- Fixed MySQL crash when adding text/blob field with unhashable default.
Backport of 4d933ad418
from master
This commit is contained in:
parent
07e01dce40
commit
69017bade0
|
@ -43,7 +43,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||||
super(DatabaseSchemaEditor, self).add_field(model, field)
|
super(DatabaseSchemaEditor, self).add_field(model, field)
|
||||||
|
|
||||||
# Simulate the effect of a one-off default.
|
# Simulate the effect of a one-off default.
|
||||||
if self.skip_default(field) and field.default not in {None, NOT_PROVIDED}:
|
# field.default may be unhashable, so a set isn't used for "in" check.
|
||||||
|
if self.skip_default(field) and field.default not in (None, NOT_PROVIDED):
|
||||||
effective_default = self.effective_default(field)
|
effective_default = self.effective_default(field)
|
||||||
self.execute('UPDATE %(table)s SET %(column)s = %%s' % {
|
self.execute('UPDATE %(table)s SET %(column)s = %%s' % {
|
||||||
'table': self.quote_name(model._meta.db_table),
|
'table': self.quote_name(model._meta.db_table),
|
||||||
|
|
|
@ -29,3 +29,6 @@ Bugfixes
|
||||||
|
|
||||||
* Alphabetized ordering of imports in ``from django.db import migrations,
|
* Alphabetized ordering of imports in ``from django.db import migrations,
|
||||||
models`` statement in newly created migrations (:ticket:`25384`).
|
models`` statement in newly created migrations (:ticket:`25384`).
|
||||||
|
|
||||||
|
* Fixed migrations crash on MySQL when adding a text or a blob field with an
|
||||||
|
unhashable default (:ticket:`25393`).
|
||||||
|
|
|
@ -695,6 +695,7 @@ unescaped
|
||||||
ungrouped
|
ungrouped
|
||||||
unhandled
|
unhandled
|
||||||
unharmful
|
unharmful
|
||||||
|
unhashable
|
||||||
unicode
|
unicode
|
||||||
uninstall
|
uninstall
|
||||||
uninstalling
|
uninstalling
|
||||||
|
|
|
@ -1535,3 +1535,15 @@ class SchemaTests(TransactionTestCase):
|
||||||
cursor.execute("SELECT surname FROM schema_author;")
|
cursor.execute("SELECT surname FROM schema_author;")
|
||||||
item = cursor.fetchall()[0]
|
item = cursor.fetchall()[0]
|
||||||
self.assertEqual(item[0], None if connection.features.interprets_empty_strings_as_nulls else '')
|
self.assertEqual(item[0], None if connection.features.interprets_empty_strings_as_nulls else '')
|
||||||
|
|
||||||
|
def test_add_textfield_unhashable_default(self):
|
||||||
|
# Create the table
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
editor.create_model(Author)
|
||||||
|
# Create a row
|
||||||
|
Author.objects.create(name='Anonymous1')
|
||||||
|
# Create a field that has an unhashable default
|
||||||
|
new_field = TextField(default={})
|
||||||
|
new_field.set_attributes_from_name("info")
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
editor.add_field(Author, new_field)
|
||||||
|
|
Loading…
Reference in New Issue