mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Refs #27558 -- Isolated indexes test on MySQL.
MySQL schema changes must be done in TransactionTestCase.
This commit is contained in:
parent
ebb85d1e79
commit
f94475e526
@ -3,7 +3,7 @@ from unittest import skipUnless
|
||||
from django.db import connection
|
||||
from django.db.models.deletion import CASCADE
|
||||
from django.db.models.fields.related import ForeignKey
|
||||
from django.test import TestCase
|
||||
from django.test import TestCase, TransactionTestCase
|
||||
|
||||
from .models import Article, ArticleTranslation, IndexTogetherSingleList
|
||||
|
||||
@ -84,7 +84,11 @@ class SchemaIndexesTests(TestCase):
|
||||
index_sql = connection.schema_editor()._model_indexes_sql(Article)
|
||||
self.assertEqual(len(index_sql), 1)
|
||||
|
||||
@skipUnless(connection.vendor == 'mysql', "This is a mysql-specific issue")
|
||||
|
||||
@skipUnless(connection.vendor == 'mysql', 'MySQL tests')
|
||||
class SchemaIndexesMySQLTests(TransactionTestCase):
|
||||
available_apps = ['indexes']
|
||||
|
||||
def test_no_index_for_foreignkey(self):
|
||||
"""
|
||||
MySQL on InnoDB already creates indexes automatically for foreign keys.
|
||||
@ -103,12 +107,19 @@ class SchemaIndexesTests(TestCase):
|
||||
|
||||
# The index also shouldn't be created if the ForeignKey is added after
|
||||
# the model was created.
|
||||
with connection.schema_editor() as editor:
|
||||
new_field = ForeignKey(Article, CASCADE)
|
||||
new_field.set_attributes_from_name('new_foreign_key')
|
||||
editor.add_field(ArticleTranslation, new_field)
|
||||
self.assertEqual(editor.deferred_sql, [
|
||||
'ALTER TABLE `indexes_articletranslation` '
|
||||
'ADD CONSTRAINT `indexes_articletrans_new_foreign_key_id_d27a9146_fk_indexes_a` '
|
||||
'FOREIGN KEY (`new_foreign_key_id`) REFERENCES `indexes_article` (`id`)'
|
||||
])
|
||||
field_created = False
|
||||
try:
|
||||
with connection.schema_editor() as editor:
|
||||
new_field = ForeignKey(Article, CASCADE)
|
||||
new_field.set_attributes_from_name('new_foreign_key')
|
||||
editor.add_field(ArticleTranslation, new_field)
|
||||
field_created = True
|
||||
self.assertEqual(editor.deferred_sql, [
|
||||
'ALTER TABLE `indexes_articletranslation` '
|
||||
'ADD CONSTRAINT `indexes_articletrans_new_foreign_key_id_d27a9146_fk_indexes_a` '
|
||||
'FOREIGN KEY (`new_foreign_key_id`) REFERENCES `indexes_article` (`id`)'
|
||||
])
|
||||
finally:
|
||||
if field_created:
|
||||
with connection.schema_editor() as editor:
|
||||
editor.remove_field(ArticleTranslation, new_field)
|
||||
|
Loading…
Reference in New Issue
Block a user