mirror of https://github.com/django/django.git
Removed unnecessary looping in sqlite3 SchemaEditor.
This commit is contained in:
parent
bdba0fc195
commit
767849b765
|
@ -115,7 +115,7 @@ class SpatialiteSchemaEditor(DatabaseSchemaEditor):
|
||||||
# do not have a db type cause they are added and removed via stored
|
# do not have a db type cause they are added and removed via stored
|
||||||
# procedures.
|
# procedures.
|
||||||
if isinstance(field, GeometryField):
|
if isinstance(field, GeometryField):
|
||||||
self._remake_table(model, delete_fields=[field])
|
self._remake_table(model, delete_field=field)
|
||||||
else:
|
else:
|
||||||
super(SpatialiteSchemaEditor, self).remove_field(model, field)
|
super(SpatialiteSchemaEditor, self).remove_field(model, field)
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||||
else:
|
else:
|
||||||
raise ValueError("Cannot quote parameter value %r of type %s" % (value, type(value)))
|
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
|
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,
|
# If any of the new or altered fields is introducing a new PK,
|
||||||
# remove the old one
|
# remove the old one
|
||||||
restore_pk_field = None
|
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()):
|
for name, field in list(body.items()):
|
||||||
if field.primary_key:
|
if field.primary_key:
|
||||||
field.primary_key = False
|
field.primary_key = False
|
||||||
|
@ -104,15 +105,16 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||||
del body[name]
|
del body[name]
|
||||||
del mapping[field.column]
|
del mapping[field.column]
|
||||||
# Add in any created fields
|
# Add in any created fields
|
||||||
for field in create_fields:
|
if create_field:
|
||||||
body[field.name] = field
|
body[create_field.name] = create_field
|
||||||
# Choose a default and insert it into the copy map
|
# Choose a default and insert it into the copy map
|
||||||
if not field.many_to_many and field.concrete:
|
if not create_field.many_to_many and create_field.concrete:
|
||||||
mapping[field.column] = self.quote_value(
|
mapping[create_field.column] = self.quote_value(
|
||||||
self.effective_default(field)
|
self.effective_default(create_field)
|
||||||
)
|
)
|
||||||
# Add in any altered fields
|
# 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)
|
body.pop(old_field.name, None)
|
||||||
mapping.pop(old_field.column, None)
|
mapping.pop(old_field.column, None)
|
||||||
body[new_field.name] = new_field
|
body[new_field.name] = new_field
|
||||||
|
@ -126,12 +128,12 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||||
mapping[new_field.column] = self.quote_name(old_field.column)
|
mapping[new_field.column] = self.quote_name(old_field.column)
|
||||||
rename_mapping[old_field.name] = new_field.name
|
rename_mapping[old_field.name] = new_field.name
|
||||||
# Remove any deleted fields
|
# Remove any deleted fields
|
||||||
for field in delete_fields:
|
if delete_field:
|
||||||
del body[field.name]
|
del body[delete_field.name]
|
||||||
del mapping[field.column]
|
del mapping[delete_field.column]
|
||||||
# Remove any implicit M2M tables
|
# Remove any implicit M2M tables
|
||||||
if field.many_to_many and field.remote_field.through._meta.auto_created:
|
if delete_field.many_to_many and delete_field.remote_field.through._meta.auto_created:
|
||||||
return self.delete_model(field.remote_field.through)
|
return self.delete_model(delete_field.remote_field.through)
|
||||||
# Work inside a new app registry
|
# Work inside a new app registry
|
||||||
apps = Apps()
|
apps = Apps()
|
||||||
|
|
||||||
|
@ -225,7 +227,7 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||||
# Special-case implicit M2M tables
|
# Special-case implicit M2M tables
|
||||||
if field.many_to_many and field.remote_field.through._meta.auto_created:
|
if field.many_to_many and field.remote_field.through._meta.auto_created:
|
||||||
return self.create_model(field.remote_field.through)
|
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):
|
def remove_field(self, model, field):
|
||||||
"""
|
"""
|
||||||
|
@ -243,13 +245,13 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||||
# It might not actually have a column behind it
|
# It might not actually have a column behind it
|
||||||
if field.db_parameters(connection=self.connection)['type'] is None:
|
if field.db_parameters(connection=self.connection)['type'] is None:
|
||||||
return
|
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,
|
def _alter_field(self, model, old_field, new_field, old_type, new_type,
|
||||||
old_db_params, new_db_params, strict=False):
|
old_db_params, new_db_params, strict=False):
|
||||||
"""Actually perform a "physical" (non-ManyToMany) field update."""
|
"""Actually perform a "physical" (non-ManyToMany) field update."""
|
||||||
# Alter by remaking table
|
# 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):
|
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.
|
# The field name didn't change, but some options did; we have to propagate this altering.
|
||||||
self._remake_table(
|
self._remake_table(
|
||||||
old_field.remote_field.through,
|
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 -
|
# 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)
|
# 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()),
|
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()),
|
new_field.remote_field.through._meta.get_field(new_field.m2m_reverse_field_name()),
|
||||||
)],
|
),
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue