diff options
| author | Tim Graham <timograham@gmail.com> | 2016-01-07 20:06:58 -0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-01-08 12:47:05 -0500 |
| commit | 56aaae58a746eb39d5e92ba60f59f4c750a8e1a8 (patch) | |
| tree | 1bf78c509606c35691bbf0ede39b47c484ebf462 /tests | |
| parent | 54d3ba84066301b9cdbbd657620c0f1e5c2422c0 (diff) | |
Fixed #26034 -- Fixed incorrect index handling on PostgreSQL on Char/TextField with unique=True and db_index=True.
Thanks Simon Charette for review.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/schema/tests.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/schema/tests.py b/tests/schema/tests.py index 7e17402f70..dfd0659d34 100644 --- a/tests/schema/tests.py +++ b/tests/schema/tests.py @@ -1757,3 +1757,63 @@ class SchemaTests(TransactionTestCase): with connection.schema_editor() as editor: editor.alter_field(Note, new_field, old_field, strict=True) self.assertEqual(self.get_constraints_for_column(Note, 'info'), []) + + @unittest.skipUnless(connection.vendor == 'postgresql', "PostgreSQL specific") + def test_alter_field_add_unique_to_charfield_with_db_index(self): + # Create the table and verify initial indexes. + with connection.schema_editor() as editor: + editor.create_model(BookWithoutAuthor) + self.assertEqual( + self.get_constraints_for_column(BookWithoutAuthor, 'title'), + ['schema_book_d5d3db17', 'schema_book_title_2dfb2dff_like'] + ) + # Alter to add unique=True (should add 1 index) + old_field = BookWithoutAuthor._meta.get_field('title') + new_field = CharField(max_length=100, db_index=True, unique=True) + new_field.set_attributes_from_name('title') + with connection.schema_editor() as editor: + editor.alter_field(BookWithoutAuthor, old_field, new_field, strict=True) + self.assertEqual( + self.get_constraints_for_column(BookWithoutAuthor, 'title'), + ['schema_book_d5d3db17', 'schema_book_title_2dfb2dff_like', 'schema_book_title_2dfb2dff_uniq'] + ) + # Alter to remove unique=True (should drop unique index) # XXX: bug! + old_field = BookWithoutAuthor._meta.get_field('title') + new_field = CharField(max_length=100, db_index=True) + new_field.set_attributes_from_name('title') + with connection.schema_editor() as editor: + editor.alter_field(BookWithoutAuthor, old_field, new_field, strict=True) + self.assertEqual( + self.get_constraints_for_column(BookWithoutAuthor, 'title'), + ['schema_book_d5d3db17', 'schema_book_title_2dfb2dff_like', 'schema_book_title_2dfb2dff_uniq'] + ) + + @unittest.skipUnless(connection.vendor == 'postgresql', "PostgreSQL specific") + def test_alter_field_add_db_index_to_charfield_with_unique(self): + # Create the table and verify initial indexes. + with connection.schema_editor() as editor: + editor.create_model(Tag) + self.assertEqual( + self.get_constraints_for_column(Tag, 'slug'), + ['schema_tag_slug_2c418ba3_like', 'schema_tag_slug_key'] + ) + # Alter to add db_index=True + old_field = Tag._meta.get_field('slug') + new_field = SlugField(db_index=True, unique=True) + new_field.set_attributes_from_name('slug') + with connection.schema_editor() as editor: + editor.alter_field(Tag, old_field, new_field, strict=True) + self.assertEqual( + self.get_constraints_for_column(Tag, 'slug'), + ['schema_tag_slug_2c418ba3_like', 'schema_tag_slug_key'] + ) + # Alter to remove db_index=True + old_field = Tag._meta.get_field('slug') + new_field = SlugField(unique=True) + new_field.set_attributes_from_name('slug') + with connection.schema_editor() as editor: + editor.alter_field(Tag, old_field, new_field, strict=True) + self.assertEqual( + self.get_constraints_for_column(Tag, 'slug'), + ['schema_tag_slug_2c418ba3_like', 'schema_tag_slug_key'] + ) |
