Merge pull request #16 from akaariai/ticket_18218

Made table_names() output sorted.
This commit is contained in:
Adrian Holovaty 2012-04-28 17:19:49 -07:00
commit 97c8992840
6 changed files with 22 additions and 8 deletions

View File

@ -42,7 +42,7 @@ class Command(NoArgsCommand):
yield 'from %s import models' % self.db_module
yield ''
known_models = []
for table_name in connection.introspection.get_table_list(cursor):
for table_name in connection.introspection.table_names(cursor):
yield 'class %s(models.Model):' % table2model(table_name)
known_models.append(table2model(table_name))
try:

View File

@ -63,7 +63,7 @@ def sql_delete(app, style, connection):
# Figure out which tables already exist
if cursor:
table_names = connection.introspection.get_table_list(cursor)
table_names = connection.introspection.table_names(cursor)
else:
table_names = []

View File

@ -898,10 +898,23 @@ class BaseDatabaseIntrospection(object):
"""
return name
def table_names(self):
"Returns a list of names of all tables that exist in the database."
cursor = self.connection.cursor()
return self.get_table_list(cursor)
def table_names(self, cursor=None):
"""
Returns a list of names of all tables that exist in the database.
The returned table list is sorted by Python's default sorting. We
do NOT use database's ORDER BY here to avoid subtle differences
in sorting order between databases.
"""
if cursor is None:
cursor = self.connection.cursor()
return sorted(self.get_table_list(cursor))
def get_table_list(self, cursor):
"""
Returns an unsorted list of names of all tables that exist in the
database.
"""
raise NotImplementedError
def django_table_names(self, only_existing=False):
"""

View File

@ -454,7 +454,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
"""
cursor = self.cursor()
if table_names is None:
table_names = self.introspection.get_table_list(cursor)
table_names = self.introspection.table_names(cursor)
for table_name in table_names:
primary_key_column_name = self.introspection.get_primary_key_column(cursor, table_name)
if not primary_key_column_name:

View File

@ -295,7 +295,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
"""
cursor = self.cursor()
if table_names is None:
table_names = self.introspection.get_table_list(cursor)
table_names = self.introspection.table_names(cursor)
for table_name in table_names:
primary_key_column_name = self.introspection.get_primary_key_column(cursor, table_name)
if not primary_key_column_name:

View File

@ -40,6 +40,7 @@ class IntrospectionTests(TestCase):
def test_table_names(self):
tl = connection.introspection.table_names()
self.assertEqual(tl, sorted(tl))
self.assertTrue(Reporter._meta.db_table in tl,
"'%s' isn't in table_list()." % Reporter._meta.db_table)
self.assertTrue(Article._meta.db_table in tl,