Commit 5ab86809 authored by Tim Graham's avatar Tim Graham
Browse files

Fixed #24892 -- Fixed quoting of SQL when renaming a field to AutoField in PostgreSQL

parent 0b5fb8e7
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -52,31 +52,31 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
                [
                    (
                        self.sql_delete_sequence % {
                            "sequence": sequence_name,
                            "sequence": self.quote_name(sequence_name),
                        },
                        [],
                    ),
                    (
                        self.sql_create_sequence % {
                            "sequence": sequence_name,
                            "sequence": self.quote_name(sequence_name),
                        },
                        [],
                    ),
                    (
                        self.sql_alter_column % {
                            "table": table,
                            "table": self.quote_name(table),
                            "changes": self.sql_alter_column_default % {
                                "column": column,
                                "default": "nextval('%s')" % sequence_name,
                                "column": self.quote_name(column),
                                "default": "nextval('%s')" % self.quote_name(sequence_name),
                            }
                        },
                        [],
                    ),
                    (
                        self.sql_set_sequence_max % {
                            "table": table,
                            "column": column,
                            "sequence": sequence_name,
                            "table": self.quote_name(table),
                            "column": self.quote_name(column),
                            "sequence": self.quote_name(sequence_name),
                        },
                        [],
                    ),
+3 −0
Original line number Diff line number Diff line
@@ -31,3 +31,6 @@ Bugfixes

* Fixed a crash when using a reverse one-to-one relation in
  ``ModelAdmin.list_display`` (:ticket:`24851`).

* Fixed quoting of SQL when renaming a field to ``AutoField`` in PostgreSQL
  (:ticket:`24892`).
+8 −0
Original line number Diff line number Diff line
@@ -80,6 +80,14 @@ class BookWithSlug(models.Model):
        db_table = "schema_book"


class IntegerPK(models.Model):
    i = models.IntegerField(primary_key=True)

    class Meta:
        apps = new_apps
        db_table = "INTEGERPK"  # uppercase to ensure proper quoting


class Note(models.Model):
    info = models.TextField()

+22 −6
Original line number Diff line number Diff line
@@ -8,8 +8,8 @@ from django.db import (
)
from django.db.models import Model
from django.db.models.fields import (
    BigIntegerField, BinaryField, BooleanField, CharField, DateTimeField,
    IntegerField, PositiveIntegerField, SlugField, TextField,
    AutoField, BigIntegerField, BinaryField, BooleanField, CharField,
    DateTimeField, IntegerField, PositiveIntegerField, SlugField, TextField,
)
from django.db.models.fields.related import (
    ForeignKey, ManyToManyField, OneToOneField,
@@ -22,8 +22,8 @@ from .fields import (
)
from .models import (
    Author, AuthorWithDefaultHeight, AuthorWithEvenLongerName, Book, BookWeak,
    BookWithLongName, BookWithO2O, BookWithSlug, Note, NoteRename, Tag,
    TagIndexed, TagM2MTest, TagUniqueRename, Thing, UniqueTest, new_apps,
    BookWithLongName, BookWithO2O, BookWithSlug, IntegerPK, Note, NoteRename,
    Tag, TagIndexed, TagM2MTest, TagUniqueRename, Thing, UniqueTest, new_apps,
)


@@ -40,8 +40,8 @@ class SchemaTests(TransactionTestCase):

    models = [
        Author, AuthorWithDefaultHeight, AuthorWithEvenLongerName, Book,
        BookWeak, BookWithLongName, BookWithO2O, BookWithSlug, Note, Tag,
        TagIndexed, TagM2MTest, TagUniqueRename, Thing, UniqueTest,
        BookWeak, BookWithLongName, BookWithO2O, BookWithSlug, IntegerPK, Note,
        Tag, TagIndexed, TagM2MTest, TagUniqueRename, Thing, UniqueTest,
    ]

    # Utility functions
@@ -748,6 +748,22 @@ class SchemaTests(TransactionTestCase):
        # field which drops the id sequence, at least on PostgreSQL.
        Author.objects.create(name='Foo')

    def test_alter_int_pk_to_autofield_pk(self):
        """
        Should be able to rename an IntegerField(primary_key=True) to
        AutoField(primary_key=True).
        """
        with connection.schema_editor() as editor:
            editor.create_model(IntegerPK)

        old_field = IntegerPK._meta.get_field('i')
        new_field = AutoField(primary_key=True)
        new_field.model = IntegerPK
        new_field.set_attributes_from_name('i')

        with connection.schema_editor() as editor:
            editor.alter_field(IntegerPK, old_field, new_field, strict=True)

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