magic-removal: Fixed #1259 -- This is VERY backwards-incompatible! Normalized all table names to be singular. Added 'django_' prefix to core tables that didn't have it. Thanks, Tom Tobin.

git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2111 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2006-01-23 02:50:15 +00:00
parent 75c4013a21
commit e8b570c3c6
9 changed files with 25 additions and 29 deletions

View File

@ -132,7 +132,7 @@ class User(models.Model):
# The SQL below works out to the following, after DB quoting: # The SQL below works out to the following, after DB quoting:
# cursor.execute(""" # cursor.execute("""
# SELECT p.package, p.codename # SELECT p.package, p.codename
# FROM auth_permissions p, auth_groups_permissions gp, auth_users_groups ug # FROM auth_permission p, auth_group_permissions gp, auth_user_groups ug
# WHERE p.id = gp.permission_id # WHERE p.id = gp.permission_id
# AND gp.group_id = ug.group_id # AND gp.group_id = ug.group_id
# AND ug.user_id = %s""", [self.id]) # AND ug.user_id = %s""", [self.id])
@ -143,7 +143,7 @@ class User(models.Model):
AND gp.%s = ug.%s AND gp.%s = ug.%s
AND ug.%s = %%s""" % ( AND ug.%s = %%s""" % (
backend.quote_name('package'), backend.quote_name('codename'), backend.quote_name('package'), backend.quote_name('codename'),
backend.quote_name('auth_permissions'), backend.quote_name('auth_groups_permissions'), backend.quote_name('auth_permission'), backend.quote_name('auth_group_permissions'),
backend.quote_name('auth_users_groups'), backend.quote_name('id'), backend.quote_name('auth_users_groups'), backend.quote_name('id'),
backend.quote_name('permission_id'), backend.quote_name('group_id'), backend.quote_name('permission_id'), backend.quote_name('group_id'),
backend.quote_name('group_id'), backend.quote_name('user_id')) backend.quote_name('group_id'), backend.quote_name('user_id'))

View File

@ -86,7 +86,6 @@ class Comment(models.Model):
site = models.ForeignKey(Site) site = models.ForeignKey(Site)
objects = CommentManager() objects = CommentManager()
class Meta: class Meta:
db_table = 'comments'
verbose_name = _('Comment') verbose_name = _('Comment')
verbose_name_plural = _('Comments') verbose_name_plural = _('Comments')
ordering = ('-submit_date',) ordering = ('-submit_date',)
@ -173,7 +172,6 @@ class FreeComment(models.Model):
approved = models.BooleanField(_('approved by staff')) approved = models.BooleanField(_('approved by staff'))
site = models.ForeignKey(Site) site = models.ForeignKey(Site)
class Meta: class Meta:
db_table = 'comments_free'
verbose_name = _('Free comment') verbose_name = _('Free comment')
verbose_name_plural = _('Free comments') verbose_name_plural = _('Free comments')
ordering = ('-submit_date',) ordering = ('-submit_date',)
@ -266,7 +264,6 @@ class UserFlag(models.Model):
flag_date = models.DateTimeField(_('flag date'), auto_now_add=True) flag_date = models.DateTimeField(_('flag date'), auto_now_add=True)
objects = UserFlagManager() objects = UserFlagManager()
class Meta: class Meta:
db_table = 'comments_user_flags'
verbose_name = _('User flag') verbose_name = _('User flag')
verbose_name_plural = _('User flags') verbose_name_plural = _('User flags')
unique_together = (('user', 'comment'),) unique_together = (('user', 'comment'),)
@ -279,7 +276,6 @@ class ModeratorDeletion(models.Model):
comment = models.ForeignKey(Comment) comment = models.ForeignKey(Comment)
deletion_date = models.DateTimeField(_('deletion date'), auto_now_add=True) deletion_date = models.DateTimeField(_('deletion date'), auto_now_add=True)
class Meta: class Meta:
db_table = 'comments_moderator_deletions'
verbose_name = _('Moderator deletion') verbose_name = _('Moderator deletion')
verbose_name_plural = _('Moderator deletions') verbose_name_plural = _('Moderator deletions')
unique_together = (('user', 'comment'),) unique_together = (('user', 'comment'),)

View File

@ -7,7 +7,7 @@ class Package(models.Model):
class Meta: class Meta:
verbose_name = _('package') verbose_name = _('package')
verbose_name_plural = _('packages') verbose_name_plural = _('packages')
db_table = 'packages' db_table = 'django_package'
ordering = ('name',) ordering = ('name',)
def __repr__(self): def __repr__(self):
@ -20,7 +20,7 @@ class ContentType(models.Model):
class Meta: class Meta:
verbose_name = _('content type') verbose_name = _('content type')
verbose_name_plural = _('content types') verbose_name_plural = _('content types')
db_table = 'content_types' db_table = 'django_content_type'
ordering = ('package', 'name') ordering = ('package', 'name')
unique_together = (('package', 'python_module_name'),) unique_together = (('package', 'python_module_name'),)

View File

@ -14,7 +14,7 @@ class FlatPage(models.Model):
registration_required = models.BooleanField(_('registration required'), help_text=_("If this is checked, only logged-in users will be able to view the page.")) registration_required = models.BooleanField(_('registration required'), help_text=_("If this is checked, only logged-in users will be able to view the page."))
sites = models.ManyToManyField(Site) sites = models.ManyToManyField(Site)
class Meta: class Meta:
db_table = 'django_flatpages' db_table = 'django_flatpage'
verbose_name = _('flat page') verbose_name = _('flat page')
verbose_name_plural = _('flat pages') verbose_name_plural = _('flat pages')
ordering = ('url',) ordering = ('url',)

View File

@ -11,7 +11,7 @@ class Redirect(models.Model):
class Meta: class Meta:
verbose_name = _('redirect') verbose_name = _('redirect')
verbose_name_plural = _('redirects') verbose_name_plural = _('redirects')
db_table = 'django_redirects' db_table = 'django_redirect'
unique_together=(('site', 'old_path'),) unique_together=(('site', 'old_path'),)
ordering = ('old_path',) ordering = ('old_path',)
class Admin: class Admin:

View File

@ -37,7 +37,7 @@ class Session(models.Model):
expire_date = models.DateTimeField(_('expire date')) expire_date = models.DateTimeField(_('expire date'))
objects = SessionManager() objects = SessionManager()
class Meta: class Meta:
db_table = 'django_sessions' db_table = 'django_session'
verbose_name = _('session') verbose_name = _('session')
verbose_name_plural = _('sessions') verbose_name_plural = _('sessions')
module_constants = { module_constants = {

View File

@ -11,7 +11,7 @@ class Site(models.Model):
name = models.CharField(_('display name'), maxlength=50) name = models.CharField(_('display name'), maxlength=50)
objects = SiteManager() objects = SiteManager()
class Meta: class Meta:
db_table = 'sites' db_table = 'django_site'
verbose_name = _('site') verbose_name = _('site')
verbose_name_plural = _('sites') verbose_name_plural = _('sites')
ordering = ('domain',) ordering = ('domain',)

View File

@ -29,7 +29,7 @@ INVALID_PROJECT_NAMES = ('django', 'test')
def _get_packages_insert(app_label): def _get_packages_insert(app_label):
from django.db import backend from django.db import backend
return "INSERT INTO %s (%s, %s) VALUES ('%s', '%s');" % \ return "INSERT INTO %s (%s, %s) VALUES ('%s', '%s');" % \
(backend.quote_name('packages'), backend.quote_name('label'), backend.quote_name('name'), (backend.quote_name('django_package'), backend.quote_name('label'), backend.quote_name('name'),
app_label, app_label) app_label, app_label)
def _get_permission_codename(action, opts): def _get_permission_codename(action, opts):
@ -46,13 +46,13 @@ def _get_all_permissions(opts):
def _get_permission_insert(name, codename, opts): def _get_permission_insert(name, codename, opts):
from django.db import backend from django.db import backend
return "INSERT INTO %s (%s, %s, %s) VALUES ('%s', '%s', '%s');" % \ return "INSERT INTO %s (%s, %s, %s) VALUES ('%s', '%s', '%s');" % \
(backend.quote_name('auth_permissions'), backend.quote_name('name'), backend.quote_name('package'), (backend.quote_name('auth_permission'), backend.quote_name('name'), backend.quote_name('package'),
backend.quote_name('codename'), name.replace("'", "''"), opts.app_label, codename) backend.quote_name('codename'), name.replace("'", "''"), opts.app_label, codename)
def _get_contenttype_insert(opts): def _get_contenttype_insert(opts):
from django.db import backend from django.db import backend
return "INSERT INTO %s (%s, %s, %s) VALUES ('%s', '%s', '%s');" % \ return "INSERT INTO %s (%s, %s, %s) VALUES ('%s', '%s', '%s');" % \
(backend.quote_name('content_types'), backend.quote_name('name'), backend.quote_name('package'), (backend.quote_name('django_content_type'), backend.quote_name('name'), backend.quote_name('package'),
backend.quote_name('python_module_name'), opts.verbose_name, opts.app_label, opts.module_name) backend.quote_name('python_module_name'), opts.verbose_name, opts.app_label, opts.module_name)
def _is_valid_dir_name(s): def _is_valid_dir_name(s):
@ -249,18 +249,18 @@ def get_sql_delete(app):
app_label = app_models[0]._meta.app_label app_label = app_models[0]._meta.app_label
# Delete from packages, auth_permissions, content_types. # Delete from django_package, auth_permission, django_content_type.
output.append("DELETE FROM %s WHERE %s = '%s';" % \ output.append("DELETE FROM %s WHERE %s = '%s';" % \
(backend.quote_name('packages'), backend.quote_name('label'), app_label)) (backend.quote_name('django_package'), backend.quote_name('label'), app_label))
output.append("DELETE FROM %s WHERE %s = '%s';" % \ output.append("DELETE FROM %s WHERE %s = '%s';" % \
(backend.quote_name('auth_permissions'), backend.quote_name('package'), app_label)) (backend.quote_name('auth_permission'), backend.quote_name('package'), app_label))
output.append("DELETE FROM %s WHERE %s = '%s';" % \ output.append("DELETE FROM %s WHERE %s = '%s';" % \
(backend.quote_name('content_types'), backend.quote_name('package'), app_label)) (backend.quote_name('django_content_type'), backend.quote_name('package'), app_label))
# Delete from the admin log. # Delete from the admin log.
if cursor is not None: if cursor is not None:
cursor.execute("SELECT %s FROM %s WHERE %s = %%s" % \ cursor.execute("SELECT %s FROM %s WHERE %s = %%s" % \
(backend.quote_name('id'), backend.quote_name('content_types'), (backend.quote_name('id'), backend.quote_name('django_content_type'),
backend.quote_name('package')), [app_label]) backend.quote_name('package')), [app_label])
if admin_log_exists: if admin_log_exists:
for row in cursor.fetchall(): for row in cursor.fetchall():
@ -373,7 +373,7 @@ def database_check(app):
# Check that the package exists in the database. # Check that the package exists in the database.
cursor.execute("SELECT 1 FROM %s WHERE %s = %%s" % \ cursor.execute("SELECT 1 FROM %s WHERE %s = %%s" % \
(backend.quote_name('packages'), backend.quote_name('label')), [app_label]) (backend.quote_name('django_package'), backend.quote_name('label')), [app_label])
if has_no_records(cursor): if has_no_records(cursor):
# sys.stderr.write("The '%s' package isn't installed.\n" % app_label) # sys.stderr.write("The '%s' package isn't installed.\n" % app_label)
print _get_packages_insert(app_label) print _get_packages_insert(app_label)
@ -388,13 +388,13 @@ def database_check(app):
contenttypes_seen[opts.module_name] = 1 contenttypes_seen[opts.module_name] = 1
for codename, name in perms: for codename, name in perms:
cursor.execute("SELECT 1 FROM %s WHERE %s = %%s AND %s = %%s" % \ cursor.execute("SELECT 1 FROM %s WHERE %s = %%s AND %s = %%s" % \
(backend.quote_name('auth_permissions'), backend.quote_name('package'), (backend.quote_name('auth_permission'), backend.quote_name('package'),
backend.quote_name('codename')), (app_label, codename)) backend.quote_name('codename')), (app_label, codename))
if has_no_records(cursor): if has_no_records(cursor):
# sys.stderr.write("The '%s.%s' permission doesn't exist.\n" % (app_label, codename)) # sys.stderr.write("The '%s.%s' permission doesn't exist.\n" % (app_label, codename))
print _get_permission_insert(name, codename, opts) print _get_permission_insert(name, codename, opts)
cursor.execute("SELECT 1 FROM %s WHERE %s = %%s AND %s = %%s" % \ cursor.execute("SELECT 1 FROM %s WHERE %s = %%s AND %s = %%s" % \
(backend.quote_name('content_types'), backend.quote_name('package'), (backend.quote_name('django_content_type'), backend.quote_name('package'),
backend.quote_name('python_module_name')), (app_label, opts.module_name)) backend.quote_name('python_module_name')), (app_label, opts.module_name))
if has_no_records(cursor): if has_no_records(cursor):
# sys.stderr.write("The '%s.%s' content type doesn't exist.\n" % (app_label, opts.module_name)) # sys.stderr.write("The '%s.%s' content type doesn't exist.\n" % (app_label, opts.module_name))
@ -403,7 +403,7 @@ def database_check(app):
# Check that there aren't any *extra* permissions in the DB that the model # Check that there aren't any *extra* permissions in the DB that the model
# doesn't know about. # doesn't know about.
cursor.execute("SELECT %s FROM %s WHERE %s = %%s" % \ cursor.execute("SELECT %s FROM %s WHERE %s = %%s" % \
(backend.quote_name('codename'), backend.quote_name('auth_permissions'), (backend.quote_name('codename'), backend.quote_name('auth_permission'),
backend.quote_name('package')), (app_label,)) backend.quote_name('package')), (app_label,))
for row in cursor.fetchall(): for row in cursor.fetchall():
try: try:
@ -411,13 +411,13 @@ def database_check(app):
except KeyError: except KeyError:
# sys.stderr.write("A permission called '%s.%s' was found in the database but not in the model.\n" % (app_label, row[0])) # sys.stderr.write("A permission called '%s.%s' was found in the database but not in the model.\n" % (app_label, row[0]))
print "DELETE FROM %s WHERE %s='%s' AND %s = '%s';" % \ print "DELETE FROM %s WHERE %s='%s' AND %s = '%s';" % \
(backend.quote_name('auth_permissions'), backend.quote_name('package'), (backend.quote_name('auth_permission'), backend.quote_name('package'),
app_label, backend.quote_name('codename'), row[0]) app_label, backend.quote_name('codename'), row[0])
# Check that there aren't any *extra* content types in the DB that the # Check that there aren't any *extra* content types in the DB that the
# model doesn't know about. # model doesn't know about.
cursor.execute("SELECT %s FROM %s WHERE %s = %%s" % \ cursor.execute("SELECT %s FROM %s WHERE %s = %%s" % \
(backend.quote_name('python_module_name'), backend.quote_name('content_types'), (backend.quote_name('python_module_name'), backend.quote_name('django_content_type'),
backend.quote_name('package')), (app_label,)) backend.quote_name('package')), (app_label,))
for row in cursor.fetchall(): for row in cursor.fetchall():
try: try:
@ -425,7 +425,7 @@ def database_check(app):
except KeyError: except KeyError:
# sys.stderr.write("A content type called '%s.%s' was found in the database but not in the model.\n" % (app_label, row[0])) # sys.stderr.write("A content type called '%s.%s' was found in the database but not in the model.\n" % (app_label, row[0]))
print "DELETE FROM %s WHERE %s='%s' AND %s = '%s';" % \ print "DELETE FROM %s WHERE %s='%s' AND %s = '%s';" % \
(backend.quote_name('content_types'), backend.quote_name('package'), (backend.quote_name('django_content_type'), backend.quote_name('package'),
app_label, backend.quote_name('python_module_name'), row[0]) app_label, backend.quote_name('python_module_name'), row[0])
database_check.help_doc = "Checks that everything is installed in the database for the given model module name(s) and prints SQL statements if needed." database_check.help_doc = "Checks that everything is installed in the database for the given model module name(s) and prints SQL statements if needed."
database_check.args = APP_ARGS database_check.args = APP_ARGS

View File

@ -6,8 +6,8 @@ from django.db.models.query import orderlist2sql
from bisect import bisect from bisect import bisect
import re import re
# Calculate the module_name using a poor-man's pluralization. # Calculate the module_name by converting to lowercase
get_module_name = lambda class_name: class_name.lower() + 's' get_module_name = lambda class_name: class_name.lower()
# Calculate the verbose_name by converting from InitialCaps to "lowercase with spaces". # Calculate the verbose_name by converting from InitialCaps to "lowercase with spaces".
get_verbose_name = lambda class_name: re.sub('([A-Z])', ' \\1', class_name).lower().strip() get_verbose_name = lambda class_name: re.sub('([A-Z])', ' \\1', class_name).lower().strip()