mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
Fixed #34529, Refs #34525 -- Reduced index operations with Meta.indexes/index_together when optimizing migrations.
This makes squashing migrations an available path for changing
Meta.index_together, which is deprecated, to Meta.indexes.
Follow up to f810325721.
This commit is contained in:
@@ -1172,3 +1172,181 @@ class OptimizerTests(SimpleTestCase):
|
||||
],
|
||||
[],
|
||||
)
|
||||
|
||||
def test_create_model_add_index(self):
|
||||
self.assertOptimizesTo(
|
||||
[
|
||||
migrations.CreateModel(
|
||||
name="Pony",
|
||||
fields=[
|
||||
("weight", models.IntegerField()),
|
||||
("age", models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
"indexes": [models.Index(fields=["age"], name="idx_pony_age")],
|
||||
},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
"Pony",
|
||||
models.Index(fields=["weight"], name="idx_pony_weight"),
|
||||
),
|
||||
],
|
||||
[
|
||||
migrations.CreateModel(
|
||||
name="Pony",
|
||||
fields=[
|
||||
("weight", models.IntegerField()),
|
||||
("age", models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
"indexes": [
|
||||
models.Index(fields=["age"], name="idx_pony_age"),
|
||||
models.Index(fields=["weight"], name="idx_pony_weight"),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def test_create_model_remove_index(self):
|
||||
self.assertOptimizesTo(
|
||||
[
|
||||
migrations.CreateModel(
|
||||
name="Pony",
|
||||
fields=[
|
||||
("weight", models.IntegerField()),
|
||||
("age", models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
"indexes": [
|
||||
models.Index(fields=["age"], name="idx_pony_age"),
|
||||
models.Index(fields=["weight"], name="idx_pony_weight"),
|
||||
],
|
||||
},
|
||||
),
|
||||
migrations.RemoveIndex("Pony", "idx_pony_age"),
|
||||
],
|
||||
[
|
||||
migrations.CreateModel(
|
||||
name="Pony",
|
||||
fields=[
|
||||
("weight", models.IntegerField()),
|
||||
("age", models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
"indexes": [
|
||||
models.Index(fields=["weight"], name="idx_pony_weight"),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def test_create_model_remove_index_together_rename_index(self):
|
||||
self.assertOptimizesTo(
|
||||
[
|
||||
migrations.CreateModel(
|
||||
name="Pony",
|
||||
fields=[
|
||||
("weight", models.IntegerField()),
|
||||
("age", models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
"index_together": [("age", "weight")],
|
||||
},
|
||||
),
|
||||
migrations.RenameIndex(
|
||||
"Pony", new_name="idx_pony_age_weight", old_fields=("age", "weight")
|
||||
),
|
||||
],
|
||||
[
|
||||
migrations.CreateModel(
|
||||
name="Pony",
|
||||
fields=[
|
||||
("weight", models.IntegerField()),
|
||||
("age", models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["age", "weight"], name="idx_pony_age_weight"
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def test_create_model_index_together_rename_index(self):
|
||||
self.assertOptimizesTo(
|
||||
[
|
||||
migrations.CreateModel(
|
||||
name="Pony",
|
||||
fields=[
|
||||
("weight", models.IntegerField()),
|
||||
("age", models.IntegerField()),
|
||||
("height", models.IntegerField()),
|
||||
("rank", models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
"index_together": [("age", "weight"), ("height", "rank")],
|
||||
},
|
||||
),
|
||||
migrations.RenameIndex(
|
||||
"Pony", new_name="idx_pony_age_weight", old_fields=("age", "weight")
|
||||
),
|
||||
],
|
||||
[
|
||||
migrations.CreateModel(
|
||||
name="Pony",
|
||||
fields=[
|
||||
("weight", models.IntegerField()),
|
||||
("age", models.IntegerField()),
|
||||
("height", models.IntegerField()),
|
||||
("rank", models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
"index_together": {("height", "rank")},
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["age", "weight"], name="idx_pony_age_weight"
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def test_create_model_rename_index_no_old_fields(self):
|
||||
self.assertOptimizesTo(
|
||||
[
|
||||
migrations.CreateModel(
|
||||
name="Pony",
|
||||
fields=[
|
||||
("weight", models.IntegerField()),
|
||||
("age", models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
"indexes": [models.Index(fields=["age"], name="idx_pony_age")],
|
||||
},
|
||||
),
|
||||
migrations.RenameIndex(
|
||||
"Pony", new_name="idx_pony_age_new", old_name="idx_pony_age"
|
||||
),
|
||||
],
|
||||
[
|
||||
migrations.CreateModel(
|
||||
name="Pony",
|
||||
fields=[
|
||||
("weight", models.IntegerField()),
|
||||
("age", models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
"indexes": [models.Index(fields=["age"], name="idx_pony_age")],
|
||||
},
|
||||
),
|
||||
migrations.RenameIndex(
|
||||
"Pony", new_name="idx_pony_age_new", old_name="idx_pony_age"
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user