diff options
| author | Hasan Ramezani <hasan.r67@gmail.com> | 2019-11-14 21:19:18 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-11-15 08:05:26 +0100 |
| commit | d0c86a1df4564c7c29d5112a73a32d369958880d (patch) | |
| tree | 1a3022fe7abfa2c1781758703711c1054fe064b3 | |
| parent | 24b9f5082344a127147266dd52d5d2dcd1c9cb44 (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.py | 18 |
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 |
