Fixed #9991: correctly introspect PostgreSQL 'real' types.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10379 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jacob Kaplan-Moss 2009-04-03 20:52:54 +00:00
parent 374b02e374
commit ffffdedfd1
2 changed files with 23 additions and 13 deletions

View File

@ -7,6 +7,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
21: 'SmallIntegerField', 21: 'SmallIntegerField',
23: 'IntegerField', 23: 'IntegerField',
25: 'TextField', 25: 'TextField',
700: 'FloatField',
701: 'FloatField', 701: 'FloatField',
869: 'IPAddressField', 869: 'IPAddressField',
1043: 'CharField', 1043: 'CharField',

View File

@ -1,3 +1,4 @@
from django.conf import settings
from django.db import connection from django.db import connection
from django.test import TestCase from django.test import TestCase
from django.utils import functional from django.utils import functional
@ -44,11 +45,11 @@ class IntrospectionTests(TestCase):
def test_django_table_names(self): def test_django_table_names(self):
cursor = connection.cursor() cursor = connection.cursor()
cursor.execute('CREATE TABLE django_introspection_testcase_table (id INTEGER);'); cursor.execute('CREATE TABLE django_introspection_test_table (id INTEGER);');
tl = connection.introspection.django_table_names() tl = connection.introspection.django_table_names()
cursor.execute("DROP TABLE django_introspection_test_table;")
self.assert_('django_introspection_testcase_table' not in tl, self.assert_('django_introspection_testcase_table' not in tl,
"django_table_names() returned a non-Django table") "django_table_names() returned a non-Django table")
cursor.execute("DROP TABLE django_introspection_testcase_table;")
def test_installed_models(self): def test_installed_models(self):
tables = [Article._meta.db_table, Reporter._meta.db_table] tables = [Article._meta.db_table, Reporter._meta.db_table]
@ -70,18 +71,18 @@ class IntrospectionTests(TestCase):
def test_get_table_description_types(self): def test_get_table_description_types(self):
cursor = connection.cursor() cursor = connection.cursor()
desc = connection.introspection.get_table_description(cursor, Reporter._meta.db_table) desc = connection.introspection.get_table_description(cursor, Reporter._meta.db_table)
# Convert the datatype into a string
def datatype(dbtype):
dt = connection.introspection.data_types_reverse[dbtype]
if type(dt) is tuple:
return dt[0]
else:
return dt
self.assertEqual([datatype(r[1]) for r in desc], self.assertEqual([datatype(r[1]) for r in desc],
['IntegerField', 'CharField', 'CharField', 'CharField']) ['IntegerField', 'CharField', 'CharField', 'CharField'])
# Regression test for #9991 - 'real' types in postgres
if settings.DATABASE_ENGINE.startswith('postgresql'):
def test_postgresql_real_type(self):
cursor = connection.cursor()
cursor.execute("CREATE TABLE django_introspection_real_test_table (number REAL);")
desc = connection.introspection.get_table_description(cursor, 'django_introspection_real_test_table')
cursor.execute('DROP TABLE django_introspection_real_test_table;')
self.assertEqual(datatype(desc[0][1]), 'FloatField')
def test_get_relations(self): def test_get_relations(self):
cursor = connection.cursor() cursor = connection.cursor()
relations = connection.introspection.get_relations(cursor, Article._meta.db_table) relations = connection.introspection.get_relations(cursor, Article._meta.db_table)
@ -97,3 +98,11 @@ class IntrospectionTests(TestCase):
cursor = connection.cursor() cursor = connection.cursor()
indexes = connection.introspection.get_indexes(cursor, Article._meta.db_table) indexes = connection.introspection.get_indexes(cursor, Article._meta.db_table)
self.assertEqual(indexes['reporter_id'], {'unique': False, 'primary_key': False}) self.assertEqual(indexes['reporter_id'], {'unique': False, 'primary_key': False})
def datatype(dbtype):
"""Helper to convert a data type into a string."""
dt = connection.introspection.data_types_reverse[dbtype]
if type(dt) is tuple:
return dt[0]
else:
return dt