Commit a9da5dd5 authored by Tim Graham's avatar Tim Graham
Browse files

[1.7.x] Fixed #23581 -- Prevented extraneous DROP DEFAULT statements.

Thanks john_scott for the report and Markus Holtermann for review.

Backport of ab4f709d from master
parent 79645529
Loading
Loading
Loading
Loading
+20 −23
Original line number Diff line number Diff line
@@ -534,15 +534,12 @@ 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:
                actions.append((
                    self.sql_alter_column_no_default % {
                        "column": self.quote_name(new_field.column),
                    },
                    [],
                ))
            else:
        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
@@ -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 % {
+2 −0
Original line number Diff line number Diff line
@@ -181,3 +181,5 @@ Bugfixes

* Supported strings escaped by third-party libraries with the ``__html__``
  convention in the template engine (:ticket:`23831`).

* Prevented extraneous ``DROP DEFAULT`` SQL in migrations (:ticket:`23581`).
+4 −0
Original line number Diff line number Diff line
@@ -554,6 +554,10 @@ class SchemaTests(TransactionTestCase):
                strict=True,
            )

        # This will fail if DROP DEFAULT is inadvertently executed on this
        # field which drops the id sequence, at least on PostgreSQL.
        Author.objects.create(name='Foo')

    def test_rename(self):
        """
        Tests simple altering of fields