mirror of https://github.com/django/django.git
Refs #23947 -- Improved migrations tests table cleanup.
Copied technique from schema tests.
This commit is contained in:
parent
ac5f2a4ef7
commit
c17d821fa7
|
@ -8,12 +8,12 @@ except ImportError:
|
|||
sqlparse = None
|
||||
|
||||
from django import test
|
||||
from django.db import connection, migrations, models
|
||||
from django.db import connection, migrations, models, transaction
|
||||
from django.db.migrations.migration import Migration
|
||||
from django.db.migrations.state import ProjectState
|
||||
from django.db.models.fields import NOT_PROVIDED
|
||||
from django.db.transaction import atomic
|
||||
from django.db.utils import IntegrityError, DatabaseError
|
||||
from django.db.utils import IntegrityError
|
||||
from django.test import override_settings
|
||||
from django.utils import six
|
||||
|
||||
|
@ -55,30 +55,25 @@ class OperationTestBase(MigrationTestBase):
|
|||
Creates a test model state and database table.
|
||||
"""
|
||||
# Delete the tables if they already exist
|
||||
with connection.cursor() as cursor:
|
||||
table_names = [
|
||||
# Start with ManyToMany tables
|
||||
try:
|
||||
cursor.execute("DROP TABLE %s_pony_stables" % app_label)
|
||||
except DatabaseError:
|
||||
pass
|
||||
try:
|
||||
cursor.execute("DROP TABLE %s_pony_vans" % app_label)
|
||||
except DatabaseError:
|
||||
pass
|
||||
|
||||
'_pony_stables', '_pony_vans',
|
||||
# Then standard model tables
|
||||
try:
|
||||
cursor.execute("DROP TABLE %s_pony" % app_label)
|
||||
except DatabaseError:
|
||||
pass
|
||||
try:
|
||||
cursor.execute("DROP TABLE %s_stable" % app_label)
|
||||
except DatabaseError:
|
||||
pass
|
||||
try:
|
||||
cursor.execute("DROP TABLE %s_van" % app_label)
|
||||
except DatabaseError:
|
||||
pass
|
||||
'_pony', '_stable', '_van',
|
||||
]
|
||||
tables = [(app_label + table_name) for table_name in table_names]
|
||||
with connection.cursor() as cursor:
|
||||
table_names = connection.introspection.table_names(cursor)
|
||||
connection.disable_constraint_checking()
|
||||
sql_delete_table = connection.schema_editor().sql_delete_table
|
||||
with transaction.atomic():
|
||||
for table in tables:
|
||||
if table in table_names:
|
||||
cursor.execute(sql_delete_table % {
|
||||
"table": connection.ops.quote_name(table),
|
||||
})
|
||||
connection.enable_constraint_checking()
|
||||
|
||||
# Make the "current" state
|
||||
model_options = {
|
||||
"swappable": "TEST_SWAP_MODEL",
|
||||
|
|
Loading…
Reference in New Issue