Commit f37c11ee authored by László Károlyi's avatar László Károlyi Committed by Tim Graham
Browse files

Fixed #24390 -- Made migration index names deterministic.

parent 4fdc7015
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -798,7 +798,7 @@ class BaseDatabaseSchemaEditor(object):
            )
        # Else generate the name for the index using a different algorithm
        table_name = model._meta.db_table.replace('"', '').replace('.', '_')
        index_unique_name = '_%x' % abs(hash((table_name, ','.join(column_names))))
        index_unique_name = '_%s' % self._digest(*column_names)
        max_length = self.connection.ops.max_name_length() or 200
        # If the index name is too long, truncate it
        index_name = ('%s_%s%s%s' % (
+13 −0
Original line number Diff line number Diff line
@@ -10,6 +10,19 @@ class SchemaIndexesTests(TestCase):
    """
    Test index handling by the db.backends.schema infrastructure.
    """

    def test_index_name_hash(self):
        """
        Index names should be deterministic.
        """
        with connection.schema_editor() as editor:
            index_name = editor._create_index_name(
                model=Article,
                column_names=("column1", "column2", "column3"),
                suffix="123",
            )
        self.assertEqual(index_name, "indexes_article_column1_856fe518123")

    def test_index_together(self):
        editor = connection.schema_editor()
        index_sql = editor._model_indexes_sql(Article)