summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorakki <akki@users.noreply.github.com>2016-07-18 18:17:30 +0530
committerTim Graham <timograham@gmail.com>2016-07-18 08:47:30 -0400
commit767849b765e881ee905f2bc1175d1c1f47445554 (patch)
treea4b18238355696806775ce311041aa8b37b1be8a
parentbdba0fc195f2e497483abefb8ea1b2d2b071c001 (diff)
Removed unnecessary looping in sqlite3 SchemaEditor.
-rw-r--r--django/contrib/gis/db/backends/spatialite/schema.py2
-rw-r--r--django/db/backends/sqlite3/schema.py38
2 files changed, 21 insertions, 19 deletions
diff --git a/django/contrib/gis/db/backends/spatialite/schema.py b/django/contrib/gis/db/backends/spatialite/schema.py
index bdf2b93740..ccedb8a0a9 100644
--- a/django/contrib/gis/db/backends/spatialite/schema.py
+++ b/django/contrib/gis/db/backends/spatialite/schema.py
@@ -115,7 +115,7 @@ class SpatialiteSchemaEditor(DatabaseSchemaEditor):
# do not have a db type cause they are added and removed via stored
# procedures.
if isinstance(field, GeometryField):
- self._remake_table(model, delete_fields=[field])
+ self._remake_table(model, delete_field=field)
else:
super(SpatialiteSchemaEditor, self).remove_field(model, field)
diff --git a/django/db/backends/sqlite3/schema.py b/django/db/backends/sqlite3/schema.py
index 863e249c2f..1a9fb1523a 100644
--- a/django/db/backends/sqlite3/schema.py
+++ b/django/db/backends/sqlite3/schema.py
@@ -67,7 +67,7 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
else:
raise ValueError("Cannot quote parameter value %r of type %s" % (value, type(value)))
- def _remake_table(self, model, create_fields=[], delete_fields=[], alter_fields=[]):
+ def _remake_table(self, model, create_field=None, delete_field=None, alter_field=None):
"""
Shortcut to transform a model from old_model into new_model
@@ -95,7 +95,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
# If any of the new or altered fields is introducing a new PK,
# remove the old one
restore_pk_field = None
- if any(f.primary_key for f in create_fields) or any(n.primary_key for o, n in alter_fields):
+ if getattr(create_field, 'primary_key', False) or (
+ alter_field and getattr(alter_field[1], 'primary_key', False)):
for name, field in list(body.items()):
if field.primary_key:
field.primary_key = False
@@ -104,15 +105,16 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
del body[name]
del mapping[field.column]
# Add in any created fields
- for field in create_fields:
- body[field.name] = field
+ if create_field:
+ body[create_field.name] = create_field
# Choose a default and insert it into the copy map
- if not field.many_to_many and field.concrete:
- mapping[field.column] = self.quote_value(
- self.effective_default(field)
+ if not create_field.many_to_many and create_field.concrete:
+ mapping[create_field.column] = self.quote_value(
+ self.effective_default(create_field)
)
# Add in any altered fields
- for (old_field, new_field) in alter_fields:
+ if alter_field:
+ old_field, new_field = alter_field
body.pop(old_field.name, None)
mapping.pop(old_field.column, None)
body[new_field.name] = new_field
@@ -126,12 +128,12 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
mapping[new_field.column] = self.quote_name(old_field.column)
rename_mapping[old_field.name] = new_field.name
# Remove any deleted fields
- for field in delete_fields:
- del body[field.name]
- del mapping[field.column]
+ if delete_field:
+ del body[delete_field.name]
+ del mapping[delete_field.column]
# Remove any implicit M2M tables
- if field.many_to_many and field.remote_field.through._meta.auto_created:
- return self.delete_model(field.remote_field.through)
+ if delete_field.many_to_many and delete_field.remote_field.through._meta.auto_created:
+ return self.delete_model(delete_field.remote_field.through)
# Work inside a new app registry
apps = Apps()
@@ -225,7 +227,7 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
# Special-case implicit M2M tables
if field.many_to_many and field.remote_field.through._meta.auto_created:
return self.create_model(field.remote_field.through)
- self._remake_table(model, create_fields=[field])
+ self._remake_table(model, create_field=field)
def remove_field(self, model, field):
"""
@@ -243,13 +245,13 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
# It might not actually have a column behind it
if field.db_parameters(connection=self.connection)['type'] is None:
return
- self._remake_table(model, delete_fields=[field])
+ self._remake_table(model, delete_field=field)
def _alter_field(self, model, old_field, new_field, old_type, new_type,
old_db_params, new_db_params, strict=False):
"""Actually perform a "physical" (non-ManyToMany) field update."""
# Alter by remaking table
- self._remake_table(model, alter_fields=[(old_field, new_field)])
+ self._remake_table(model, alter_field=(old_field, new_field))
def _alter_many_to_many(self, model, old_field, new_field, strict):
"""
@@ -259,12 +261,12 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
# The field name didn't change, but some options did; we have to propagate this altering.
self._remake_table(
old_field.remote_field.through,
- alter_fields=[(
+ alter_field=(
# We need the field that points to the target model, so we can tell alter_field to change it -
# this is m2m_reverse_field_name() (as opposed to m2m_field_name, which points to our model)
old_field.remote_field.through._meta.get_field(old_field.m2m_reverse_field_name()),
new_field.remote_field.through._meta.get_field(new_field.m2m_reverse_field_name()),
- )],
+ ),
)
return