diff options
| author | David Wobrock <david.wobrock@gmail.com> | 2022-05-02 17:22:54 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-05-12 20:44:03 +0200 |
| commit | eacd4977f6a4bb038e82796ba79a2f61bae330c6 (patch) | |
| tree | 8d9b1c7d18226a8922826257ed997cee6229af10 /django/db/backends/base | |
| parent | 20e65a34aea0ace077033c84854dcf225e248f8c (diff) | |
Refs #27064 -- Added RenameIndex migration operation.
Diffstat (limited to 'django/db/backends/base')
| -rw-r--r-- | django/db/backends/base/features.py | 3 | ||||
| -rw-r--r-- | django/db/backends/base/schema.py | 19 |
2 files changed, 22 insertions, 0 deletions
diff --git a/django/db/backends/base/features.py b/django/db/backends/base/features.py index a96dbe1b08..68cad9fef2 100644 --- a/django/db/backends/base/features.py +++ b/django/db/backends/base/features.py @@ -176,6 +176,9 @@ class BaseDatabaseFeatures: # Can it create foreign key constraints inline when adding columns? can_create_inline_fk = True + # Can an index be renamed? + can_rename_index = False + # Does it automatically index foreign keys? indexes_foreign_keys = True diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py index 468ab42490..f2ca8c8df9 100644 --- a/django/db/backends/base/schema.py +++ b/django/db/backends/base/schema.py @@ -131,6 +131,7 @@ class BaseDatabaseSchemaEditor: "CREATE UNIQUE INDEX %(name)s ON %(table)s " "(%(columns)s)%(include)s%(condition)s" ) + sql_rename_index = "ALTER INDEX %(old_name)s RENAME TO %(new_name)s" sql_delete_index = "DROP INDEX %(name)s" sql_create_pk = ( @@ -492,6 +493,16 @@ class BaseDatabaseSchemaEditor: return None self.execute(index.remove_sql(model, self)) + def rename_index(self, model, old_index, new_index): + if self.connection.features.can_rename_index: + self.execute( + self._rename_index_sql(model, old_index.name, new_index.name), + params=None, + ) + else: + self.remove_index(model, old_index) + self.add_index(model, new_index) + def add_constraint(self, model, constraint): """Add a constraint to a model.""" sql = constraint.create_sql(model, self) @@ -1361,6 +1372,14 @@ class BaseDatabaseSchemaEditor: name=self.quote_name(name), ) + def _rename_index_sql(self, model, old_name, new_name): + return Statement( + self.sql_rename_index, + table=Table(model._meta.db_table, self.quote_name), + old_name=self.quote_name(old_name), + new_name=self.quote_name(new_name), + ) + def _index_columns(self, table, columns, col_suffixes, opclasses): return Columns(table, columns, self.quote_name, col_suffixes=col_suffixes) |
