Skip to content

Commit

Permalink
use _meta.localfields instead of _meta.fields, this also fixes model
Browse files Browse the repository at this point in the history
inheritence support
  • Loading branch information
trbs committed Jul 31, 2009
1 parent 35e99c5 commit a36426c
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions django_extensions/management/commands/sqldiff.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ def __init__(self, app_models, options):
'field-parameter-differ': self.SQL_FIELD_PARAMETER_DIFFER,
}


def add_app_model_marker(self, app_label, model_name):
self.differences.append((app_label, model_name, []))

Expand Down Expand Up @@ -201,7 +200,7 @@ def strip_parameters(self, field_type):
return field_type

def find_unique_missing_in_db(self, meta, table_indexes, table_name):
for field in meta.fields:
for field in meta.local_fields:
if field.unique:
attname = field.db_column or field.attname
if attname in table_indexes and table_indexes[attname]['unique']:
Expand All @@ -211,21 +210,21 @@ def find_unique_missing_in_db(self, meta, table_indexes, table_name):
def find_unique_missing_in_model(self, meta, table_indexes, table_name):
# TODO: Postgresql does not list unique_togethers in table_indexes
# MySQL does
fields = dict([(field.db_column or field.name, field.unique) for field in meta.fields])
fields = dict([(field.db_column or field.name, field.unique) for field in meta.local_fields])
for att_name, att_opts in table_indexes.iteritems():
if att_opts['unique'] and att_name in fields and not fields[att_name]:
if att_name in flatten(meta.unique_together): continue
self.add_difference('unique-missing-in-model', table_name, att_name)

def find_index_missing_in_db(self, meta, table_indexes, table_name):
for field in meta.fields:
for field in meta.local_fields:
if field.db_index:
attname = field.db_column or field.attname
if not attname in table_indexes:
self.add_difference('index-missing-in-db', table_name, attname)

def find_index_missing_in_model(self, meta, table_indexes, table_name):
fields = dict([(field.name, field) for field in meta.fields])
fields = dict([(field.name, field) for field in meta.local_fields])
for att_name, att_opts in table_indexes.iteritems():
if att_name in fields:
field = fields[att_name]
Expand All @@ -248,7 +247,7 @@ def find_field_missing_in_db(self, fieldmap, table_description, table_name):

def find_field_type_differ(self, meta, table_description, table_name, func=None):
db_fields = dict([(row[0], row) for row in table_description])
for field in meta.fields:
for field in meta.local_fields:
if field.name not in db_fields: continue
description = db_fields[field.name]

Expand All @@ -264,7 +263,7 @@ def find_field_type_differ(self, meta, table_description, table_name, func=None)

def find_field_parameter_differ(self, meta, table_description, table_name, func=None):
db_fields = dict([(row[0], row) for row in table_description])
for field in meta.fields:
for field in meta.local_fields:
if field.name not in db_fields: continue
description = db_fields[field.name]

Expand Down Expand Up @@ -300,7 +299,7 @@ def find_differences(self):
continue

table_indexes = self.introspection.get_indexes(self.cursor, table_name)
fieldmap = dict([(field.db_column or field.get_attname(), field) for field in meta.fields])
fieldmap = dict([(field.db_column or field.get_attname(), field) for field in meta.local_fields])

# add ordering field if model uses order_with_respect_to
if meta.order_with_respect_to:
Expand Down Expand Up @@ -419,7 +418,7 @@ class SqliteSQLDiff(SQLDiff):
# if this is more generic among databases this might be usefull
# to add to the superclass's find_unique_missing_in_db method
def find_unique_missing_in_db(self, meta, table_indexes, table_name):
for field in meta.fields:
for field in meta.local_fields:
if field.unique:
attname = field.attname
if attname in table_indexes and table_indexes[attname]['unique']:
Expand Down Expand Up @@ -538,6 +537,10 @@ class Command(BaseCommand):
args = '<appname appname ...>'

def handle(self, *app_labels, **options):
from django import VERSION
if VERSION[:2]<(1,0):
raise CommandError("SQLDiff only support Django 1.0 or higher!")

from django.db import models
from django.conf import settings

Expand Down

0 comments on commit a36426c

Please sign in to comment.