diff options
| author | Tim Graham <timograham@gmail.com> | 2014-12-29 16:23:18 -0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-12-30 08:31:18 -0500 |
| commit | a9da5dd5b6f722a230a69211ad8e00a20cafcd38 (patch) | |
| tree | c9f8e0a56452b000cc54ec618ff8035e8528e227 /django | |
| parent | 79645529e7ce03a7eef1e51e7058a9880f83efb5 (diff) | |
[1.7.x] Fixed #23581 -- Prevented extraneous DROP DEFAULT statements.
Thanks john_scott for the report and Markus Holtermann for review.
Backport of ab4f709da4516672b0bd811f2b4d0c4ba9f5b636 from master
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/backends/schema.py | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/django/db/backends/schema.py b/django/db/backends/schema.py index 900b1b2302..f13bde8bf5 100644 --- a/django/db/backends/schema.py +++ b/django/db/backends/schema.py @@ -534,34 +534,31 @@ class BaseDatabaseSchemaEditor(object): # Default change? old_default = self.effective_default(old_field) new_default = self.effective_default(new_field) - if old_default != new_default and not self.skip_default(new_field): - if new_default is None: + needs_database_default = ( + old_default != new_default and + new_default is not None and + not self.skip_default(new_field) + ) + if needs_database_default: + if self.connection.features.requires_literal_defaults: + # Some databases can't take defaults as a parameter (oracle) + # If this is the case, the individual schema backend should + # implement prepare_default actions.append(( - self.sql_alter_column_no_default % { + self.sql_alter_column_default % { "column": self.quote_name(new_field.column), + "default": self.prepare_default(new_default), }, [], )) else: - if self.connection.features.requires_literal_defaults: - # Some databases can't take defaults as a parameter (oracle) - # If this is the case, the individual schema backend should - # implement prepare_default - actions.append(( - self.sql_alter_column_default % { - "column": self.quote_name(new_field.column), - "default": self.prepare_default(new_default), - }, - [], - )) - else: - actions.append(( - self.sql_alter_column_default % { - "column": self.quote_name(new_field.column), - "default": "%s", - }, - [new_default], - )) + actions.append(( + self.sql_alter_column_default % { + "column": self.quote_name(new_field.column), + "default": "%s", + }, + [new_default], + )) # Nullability change? if old_field.null != new_field.null: if new_field.null: @@ -696,7 +693,7 @@ class BaseDatabaseSchemaEditor(object): ) # Drop the default if we need to # (Django usually does not use in-database defaults) - if not self.skip_default(new_field) and new_field.default is not None: + if needs_database_default: sql = self.sql_alter_column % { "table": self.quote_name(model._meta.db_table), "changes": self.sql_alter_column_no_default % { |
