summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2019-11-14 21:19:18 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-11-15 08:05:26 +0100
commitd0c86a1df4564c7c29d5112a73a32d369958880d (patch)
tree1a3022fe7abfa2c1781758703711c1054fe064b3
parent24b9f5082344a127147266dd52d5d2dcd1c9cb44 (diff)
Refs #29808 -- Optimized MigrationExecutor.detect_soft_applied().
Use set() for iterables used only for containment checks. Simplify column checks O(n) instead of O(2n). Thanks Simon Charette for an idea.
-rw-r--r--django/db/migrations/executor.py18
1 files changed, 10 insertions, 8 deletions
diff --git a/django/db/migrations/executor.py b/django/db/migrations/executor.py
index 7b779819e9..ee275cdaef 100644
--- a/django/db/migrations/executor.py
+++ b/django/db/migrations/executor.py
@@ -330,7 +330,7 @@ class MigrationExecutor:
found_create_model_migration = False
found_add_field_migration = False
with self.connection.cursor() as cursor:
- existing_table_names = self.connection.introspection.table_names(cursor)
+ existing_table_names = set(self.connection.introspection.table_names(cursor))
# Make sure all create model and add field operations are done
for operation in migration.operations:
if isinstance(operation, migrations.CreateModel):
@@ -363,14 +363,16 @@ class MigrationExecutor:
else:
found_add_field_migration = True
continue
-
- column_names = [
- column.name for column in
- self.connection.introspection.get_table_description(self.connection.cursor(), table)
- ]
- if field.column not in column_names:
+ columns = self.connection.introspection.get_table_description(
+ self.connection.cursor(),
+ table,
+ )
+ for column in columns:
+ if column.name == field.column:
+ found_add_field_migration = True
+ break
+ else:
return False, project_state
- found_add_field_migration = True
# If we get this far and we found at least one CreateModel or AddField migration,
# the migration is considered implicitly applied.
return (found_create_model_migration or found_add_field_migration), after_state