summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Holtermann <info@markusholtermann.eu>2015-06-14 21:27:26 +0200
committerMarkus Holtermann <info@markusholtermann.eu>2015-06-16 00:46:04 +0200
commitc5eca746198943a58e6a2377211428fda3f4d878 (patch)
tree1fd90a3b39827629c6037ee2d423281101242f30
parente470f311d654267ec86f9a6325ec500345b9dff2 (diff)
Sorted reduce methods in migration optimizer
Thanks Tim Graham for the review.
-rw-r--r--django/db/migrations/optimizer.py130
1 files changed, 70 insertions, 60 deletions
diff --git a/django/db/migrations/optimizer.py b/django/db/migrations/optimizer.py
index 96909e748e..4a8ce15f7f 100644
--- a/django/db/migrations/optimizer.py
+++ b/django/db/migrations/optimizer.py
@@ -32,30 +32,26 @@ class MigrationOptimizer(object):
AlterField,
)
self.reduce_methods = {
- (AddField, AlterField): self.reduce_add_field_alter_field,
- (AddField, RemoveField): self.reduce_add_field_delete_field,
- (AlterField, RemoveField): self.reduce_alter_field_delete_field,
- (CreateModel, AddField): self.reduce_create_model_add_field,
- (CreateModel, AlterField): self.reduce_create_model_alter_field,
- (CreateModel, DeleteModel): self.reduce_model_create_delete,
- (CreateModel, RemoveField): self.reduce_create_model_remove_field,
- (CreateModel, RenameModel): self.reduce_model_create_rename,
- (RenameModel, RenameModel): self.reduce_model_rename_self,
+ # (model operation, model operation)
+ (CreateModel, DeleteModel): self.reduce_create_model_delete_model,
+ (CreateModel, RenameModel): self.reduce_create_model_rename_model,
+ (RenameModel, RenameModel): self.reduce_rename_model_rename_model,
- (AlterIndexTogether, DeleteModel): self.reduce_model_alter_delete,
- (AlterModelTable, DeleteModel): self.reduce_model_alter_delete,
- (AlterOrderWithRespectTo, DeleteModel): self.reduce_model_alter_delete,
- (AlterUniqueTogether, DeleteModel): self.reduce_model_alter_delete,
+ (AlterIndexTogether, AlterIndexTogether): self.reduce_alter_model_alter_model,
+ (AlterModelTable, AlterModelTable): self.reduce_alter_model_alter_model,
+ (AlterOrderWithRespectTo, AlterOrderWithRespectTo): self.reduce_alter_model_alter_model,
+ (AlterUniqueTogether, AlterUniqueTogether): self.reduce_alter_model_alter_model,
- (AlterIndexTogether, AlterIndexTogether): self.reduce_model_alter_alter,
- (AlterModelTable, AlterModelTable): self.reduce_model_alter_alter,
- (AlterOrderWithRespectTo, AlterOrderWithRespectTo): self.reduce_model_alter_alter,
- (AlterUniqueTogether, AlterUniqueTogether): self.reduce_model_alter_alter,
+ (AlterIndexTogether, DeleteModel): self.reduce_alter_model_delete_model,
+ (AlterModelTable, DeleteModel): self.reduce_alter_model_delete_model,
+ (AlterOrderWithRespectTo, DeleteModel): self.reduce_alter_model_delete_model,
+ (AlterUniqueTogether, DeleteModel): self.reduce_alter_model_delete_model,
- (AddField, RenameField): self.reduce_add_field_rename_field,
- (AlterField, RenameField): self.reduce_alter_field_rename_field,
+ # (model operation, field operation)
+ (CreateModel, AddField): self.reduce_create_model_add_field,
+ (CreateModel, AlterField): self.reduce_create_model_alter_field,
+ (CreateModel, RemoveField): self.reduce_create_model_remove_field,
(CreateModel, RenameField): self.reduce_create_model_rename_field,
- (RenameField, RenameField): self.reduce_rename_field_self,
(AlterIndexTogether, AddField): self.reduce_alter_model_addalterremove_field,
(AlterIndexTogether, AlterField): self.reduce_alter_model_addalterremove_field,
@@ -70,6 +66,14 @@ class MigrationOptimizer(object):
(AlterIndexTogether, RenameField): self.reduce_alter_model_rename_field,
(AlterOrderWithRespectTo, RenameField): self.reduce_alter_model_rename_field,
(AlterUniqueTogether, RenameField): self.reduce_alter_model_rename_field,
+
+ # (field operation, field operation)
+ (AddField, AlterField): self.reduce_add_field_alter_field,
+ (AddField, RemoveField): self.reduce_add_field_remove_field,
+ (AddField, RenameField): self.reduce_add_field_rename_field,
+ (AlterField, RemoveField): self.reduce_alter_field_remove_field,
+ (AlterField, RenameField): self.reduce_alter_field_rename_field,
+ (RenameField, RenameField): self.reduce_rename_field_rename_field,
}
def optimize(self, operations, app_label=None):
@@ -148,7 +152,9 @@ class MigrationOptimizer(object):
model._meta.object_name,
)
- def reduce_model_create_delete(self, operation, other, in_between):
+ # REDUCE METHODS: (MODEL OPERATION, MODEL OPERATION)
+
+ def reduce_create_model_delete_model(self, operation, other, in_between):
"""
Folds a CreateModel and a DeleteModel into nothing.
"""
@@ -156,22 +162,7 @@ class MigrationOptimizer(object):
not operation.options.get("proxy", False)):
return []
- def reduce_model_alter_delete(self, operation, other, in_between):
- """
- Folds an AlterModelSomething and a DeleteModel into just delete.
- """
- if operation.name_lower == other.name_lower:
- return [other]
-
- def reduce_model_alter_alter(self, operation, other, in_between):
- """
- Folds two AlterModelTable, AlterFooTogether, or AlterOrderWithRespectTo
- operations into the latter.
- """
- if operation.name_lower == other.name_lower:
- return [other]
-
- def reduce_model_create_rename(self, operation, other, in_between):
+ def reduce_create_model_rename_model(self, operation, other, in_between):
"""
Folds a model rename into its create
"""
@@ -186,7 +177,7 @@ class MigrationOptimizer(object):
)
]
- def reduce_model_rename_self(self, operation, other, in_between):
+ def reduce_rename_model_rename_model(self, operation, other, in_between):
"""
Folds a model rename into another one
"""
@@ -198,6 +189,23 @@ class MigrationOptimizer(object):
)
]
+ def reduce_alter_model_alter_model(self, operation, other, in_between):
+ """
+ Folds two AlterModelTable, AlterFooTogether, or AlterOrderWithRespectTo
+ operations into the latter.
+ """
+ if operation.name_lower == other.name_lower:
+ return [other]
+
+ def reduce_alter_model_delete_model(self, operation, other, in_between):
+ """
+ Folds an AlterModelSomething and a DeleteModel into just delete.
+ """
+ if operation.name_lower == other.name_lower:
+ return [other]
+
+ # REDUCE METHODS: (MODEL OPERATION, FIELD OPERATION)
+
def reduce_create_model_add_field(self, operation, other, in_between):
if operation.name_lower == other.model_name_lower:
# Don't allow optimizations of FKs through models they reference
@@ -238,14 +246,15 @@ class MigrationOptimizer(object):
)
]
- def reduce_create_model_rename_field(self, operation, other, in_between):
+ def reduce_create_model_remove_field(self, operation, other, in_between):
if operation.name_lower == other.model_name_lower:
return [
CreateModel(
operation.name,
fields=[
- (other.new_name if n == other.old_name else n, v)
+ (n, v)
for n, v in operation.fields
+ if n.lower() != other.name_lower
],
options=operation.options,
bases=operation.bases,
@@ -253,15 +262,14 @@ class MigrationOptimizer(object):
)
]
- def reduce_create_model_remove_field(self, operation, other, in_between):
+ def reduce_create_model_rename_field(self, operation, other, in_between):
if operation.name_lower == other.model_name_lower:
return [
CreateModel(
operation.name,
fields=[
- (n, v)
+ (other.new_name if n == other.old_name else n, v)
for n, v in operation.fields
- if n.lower() != other.name_lower
],
options=operation.options,
bases=operation.bases,
@@ -269,6 +277,18 @@ class MigrationOptimizer(object):
)
]
+ def reduce_alter_model_addalterremove_field(self, operation, other, in_between):
+ if (operation.name_lower == other.model_name_lower and
+ not operation.references_field(other.model_name, other.name)):
+ return [other, operation]
+
+ def reduce_alter_model_rename_field(self, operation, other, in_between):
+ if (operation.name_lower == other.model_name_lower and
+ not operation.references_field(other.model_name, other.old_name)):
+ return [other, operation]
+
+ # REDUCE METHODS: (FIELD OPERATION, FIELD OPERATION)
+
def reduce_add_field_alter_field(self, operation, other, in_between):
if (operation.model_name_lower == other.model_name_lower and
operation.name_lower == other.name_lower):
@@ -280,16 +300,11 @@ class MigrationOptimizer(object):
)
]
- def reduce_add_field_delete_field(self, operation, other, in_between):
+ def reduce_add_field_remove_field(self, operation, other, in_between):
if (operation.model_name_lower == other.model_name_lower and
operation.name_lower == other.name_lower):
return []
- def reduce_alter_field_delete_field(self, operation, other, in_between):
- if (operation.model_name_lower == other.model_name_lower and
- operation.name_lower == other.name_lower):
- return [other]
-
def reduce_add_field_rename_field(self, operation, other, in_between):
if (operation.model_name_lower == other.model_name_lower and
operation.name_lower == other.old_name_lower):
@@ -301,6 +316,11 @@ class MigrationOptimizer(object):
)
]
+ def reduce_alter_field_remove_field(self, operation, other, in_between):
+ if (operation.model_name_lower == other.model_name_lower and
+ operation.name_lower == other.name_lower):
+ return [other]
+
def reduce_alter_field_rename_field(self, operation, other, in_between):
if (operation.model_name_lower == other.model_name_lower and
operation.name_lower == other.old_name_lower):
@@ -313,7 +333,7 @@ class MigrationOptimizer(object):
),
]
- def reduce_rename_field_self(self, operation, other, in_between):
+ def reduce_rename_field_rename_field(self, operation, other, in_between):
if (operation.model_name_lower == other.model_name_lower and
operation.new_name_lower == other.old_name_lower):
return [
@@ -324,16 +344,6 @@ class MigrationOptimizer(object):
),
]
- def reduce_alter_model_addalterremove_field(self, operation, other, in_between):
- if (operation.name_lower == other.model_name_lower and
- not operation.references_field(other.model_name, other.name)):
- return [other, operation]
-
- def reduce_alter_model_rename_field(self, operation, other, in_between):
- if (operation.name_lower == other.model_name_lower and
- not operation.references_field(other.model_name, other.old_name)):
- return [other, operation]
-
# THROUGH CHECKS
def can_optimize_through(self, operation, other, app_label=None):