From 2e4cfcd2b9a0984ad6c4087a5deebbf33413835c Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Tue, 12 Jul 2016 17:50:17 -0700 Subject: [PATCH] Fixed #26889 -- Fixed missing PostgreSQL index in SchemaEditor.add_field(). --- django/db/backends/postgresql/schema.py | 6 ++++++ docs/releases/1.8.14.txt | 14 +++++++++++++ docs/releases/1.9.8.txt | 4 +++- docs/releases/index.txt | 1 + tests/schema/tests.py | 26 +++++++++++++++++++++++++ 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 docs/releases/1.8.14.txt diff --git a/django/db/backends/postgresql/schema.py b/django/db/backends/postgresql/schema.py index 5faaea0672..c21c35c815 100644 --- a/django/db/backends/postgresql/schema.py +++ b/django/db/backends/postgresql/schema.py @@ -17,6 +17,12 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): def quote_value(self, value): return psycopg2.extensions.adapt(value) + def add_field(self, model, field): + super(DatabaseSchemaEditor, self).add_field(model, field) + like_index_statement = self._create_like_index_sql(model, field) + if like_index_statement is not None: + self.deferred_sql.append(like_index_statement) + def _model_indexes_sql(self, model): output = super(DatabaseSchemaEditor, self)._model_indexes_sql(model) if not model._meta.managed or model._meta.proxy or model._meta.swapped: diff --git a/docs/releases/1.8.14.txt b/docs/releases/1.8.14.txt new file mode 100644 index 0000000000..6311172abc --- /dev/null +++ b/docs/releases/1.8.14.txt @@ -0,0 +1,14 @@ +=========================== +Django 1.8.14 release notes +=========================== + +*Under development* + +Django 1.8.14 fixes several bugs in 1.8.13. + +Bugfixes +======== + +* Fixed missing ``varchar/text_pattern_ops`` index on ``CharField`` and + ``TextField`` respectively when using ``AddField`` on PostgreSQL + (:ticket:`26889`). diff --git a/docs/releases/1.9.8.txt b/docs/releases/1.9.8.txt index 7a3b55bae5..7265e166b8 100644 --- a/docs/releases/1.9.8.txt +++ b/docs/releases/1.9.8.txt @@ -9,4 +9,6 @@ Django 1.9.8 fixes several bugs in 1.9.7. Bugfixes ======== -* ... +* Fixed missing ``varchar/text_pattern_ops`` index on ``CharField`` and + ``TextField`` respectively when using ``AddField`` on PostgreSQL + (:ticket:`26889`). diff --git a/docs/releases/index.txt b/docs/releases/index.txt index 75516e7cf6..6dfc7a4a43 100644 --- a/docs/releases/index.txt +++ b/docs/releases/index.txt @@ -55,6 +55,7 @@ versions of the documentation contain the release notes for any later releases. .. toctree:: :maxdepth: 1 + 1.8.14 1.8.13 1.8.12 1.8.11 diff --git a/tests/schema/tests.py b/tests/schema/tests.py index 96c2956e9a..5b51bd36a9 100644 --- a/tests/schema/tests.py +++ b/tests/schema/tests.py @@ -1907,6 +1907,32 @@ class SchemaTests(TransactionTestCase): with connection.schema_editor() as editor: editor.add_field(Author, new_field) + @unittest.skipUnless(connection.vendor == 'postgresql', "PostgreSQL specific") + def test_add_indexed_charfield(self): + field = CharField(max_length=255, db_index=True) + field.set_attributes_from_name('nom_de_plume') + with connection.schema_editor() as editor: + editor.create_model(Author) + editor.add_field(Author, field) + # Should create two indexes; one for like operator. + self.assertEqual( + self.get_constraints_for_column(Author, 'nom_de_plume'), + ['schema_author_95aa9e9b', 'schema_author_nom_de_plume_7570a851_like'], + ) + + @unittest.skipUnless(connection.vendor == 'postgresql', "PostgreSQL specific") + def test_add_unique_charfield(self): + field = CharField(max_length=255, unique=True) + field.set_attributes_from_name('nom_de_plume') + with connection.schema_editor() as editor: + editor.create_model(Author) + editor.add_field(Author, field) + # Should create two indexes; one for like operator. + self.assertEqual( + self.get_constraints_for_column(Author, 'nom_de_plume'), + ['schema_author_nom_de_plume_7570a851_like', 'schema_author_nom_de_plume_key'] + ) + @unittest.skipUnless(connection.vendor == 'postgresql', "PostgreSQL specific") def test_alter_field_add_index_to_charfield(self): # Create the table and verify no initial indexes.