Fixed #33710 -- Made RenameIndex operation a noop when the old and new name match.

This commit is contained in:
David Wobrock 2022-05-16 09:57:49 +02:00 committed by Mariusz Felisiak
parent 647480166b
commit 11310e9abb
2 changed files with 8 additions and 0 deletions

View File

@ -960,6 +960,9 @@ class RenameIndex(IndexOperation):
else: else:
from_model_state = from_state.models[app_label, self.model_name_lower] from_model_state = from_state.models[app_label, self.model_name_lower]
old_index = from_model_state.get_index_by_name(self.old_name) old_index = from_model_state.get_index_by_name(self.old_name)
# Don't alter when the index name is not changed.
if old_index.name == self.new_name:
return
to_model_state = to_state.models[app_label, self.model_name_lower] to_model_state = to_state.models[app_label, self.model_name_lower]
new_index = to_model_state.get_index_by_name(self.new_name) new_index = to_model_state.get_index_by_name(self.new_name)

View File

@ -2988,6 +2988,11 @@ class OperationTests(OperationTestBase):
with connection.schema_editor() as editor, self.assertNumQueries(0): with connection.schema_editor() as editor, self.assertNumQueries(0):
operation.database_backwards(app_label, editor, new_state, project_state) operation.database_backwards(app_label, editor, new_state, project_state)
self.assertIndexNameExists(table_name, "new_pony_test_idx") self.assertIndexNameExists(table_name, "new_pony_test_idx")
# Reapply, RenameIndex operation is a noop when the old and new name
# match.
with connection.schema_editor() as editor:
operation.database_forwards(app_label, editor, new_state, project_state)
self.assertIndexNameExists(table_name, "new_pony_test_idx")
# Deconstruction. # Deconstruction.
definition = operation.deconstruct() definition = operation.deconstruct()
self.assertEqual(definition[0], "RenameIndex") self.assertEqual(definition[0], "RenameIndex")