Loading django/db/backends/base/schema.py +1 −1 Original line number Diff line number Diff line Loading @@ -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' % ( Loading tests/indexes/tests.py +13 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading
django/db/backends/base/schema.py +1 −1 Original line number Diff line number Diff line Loading @@ -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' % ( Loading
tests/indexes/tests.py +13 −0 Original line number Diff line number Diff line Loading @@ -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) Loading