1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

Refs #34534 -- Reduced Add/RemoveConstraint and Add/RenameIndex operations when optimizing migrations.

This commit is contained in:
Akash Kumar Sen
2023-05-08 23:24:46 +05:30
committed by Mariusz Felisiak
parent 59262c294d
commit 92f0017133
3 changed files with 64 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ from django.db import migrations, models
from django.db.migrations import operations
from django.db.migrations.optimizer import MigrationOptimizer
from django.db.migrations.serializer import serializer_factory
from django.db.models.functions import Abs
from django.test import SimpleTestCase
from .models import EmptyManager, UnicodeModel
@@ -1159,6 +1160,38 @@ class OptimizerTests(SimpleTestCase):
]
)
def test_add_rename_index(self):
tests = [
models.Index(fields=["weight", "pink"], name="mid_name"),
models.Index(Abs("weight"), name="mid_name"),
models.Index(
Abs("weight"), name="mid_name", condition=models.Q(weight__gt=0)
),
]
for index in tests:
with self.subTest(index=index):
renamed_index = index.clone()
renamed_index.name = "new_name"
self.assertOptimizesTo(
[
migrations.AddIndex("Pony", index),
migrations.RenameIndex(
"Pony", new_name="new_name", old_name="mid_name"
),
],
[
migrations.AddIndex("Pony", renamed_index),
],
)
self.assertDoesNotOptimize(
[
migrations.AddIndex("Pony", index),
migrations.RenameIndex(
"Pony", new_name="new_name", old_name="other_name"
),
],
)
def test_add_remove_index(self):
self.assertOptimizesTo(
[
@@ -1173,6 +1206,24 @@ class OptimizerTests(SimpleTestCase):
[],
)
def test_add_remove_constraint(self):
gt_constraint = models.CheckConstraint(
check=models.Q(pink__gt=2), name="constraint_pony_pink_gt_2"
)
self.assertOptimizesTo(
[
migrations.AddConstraint("Pony", gt_constraint),
migrations.RemoveConstraint("Pony", gt_constraint.name),
],
[],
)
self.assertDoesNotOptimize(
[
migrations.AddConstraint("Pony", gt_constraint),
migrations.RemoveConstraint("Pony", "other_name"),
],
)
def test_create_model_add_index(self):
self.assertOptimizesTo(
[