Skip to content

Commit

Permalink
[1.0.X] Fixed #9991: correctly introspect PostgreSQL 'real' types. Ba…
Browse files Browse the repository at this point in the history
…ckport of r10379 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10380 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jacobian committed Apr 3, 2009
1 parent b45cf13 commit fd89651
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 13 deletions.
1 change: 1 addition & 0 deletions django/db/backends/postgresql/introspection.py
Expand Up @@ -7,6 +7,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
21: 'SmallIntegerField',
23: 'IntegerField',
25: 'TextField',
700: 'FloatField',
701: 'FloatField',
869: 'IPAddressField',
1043: 'CharField',
Expand Down
35 changes: 22 additions & 13 deletions tests/regressiontests/introspection/tests.py
@@ -1,3 +1,4 @@
from django.conf import settings
from django.db import connection
from django.test import TestCase
from django.utils import functional
Expand Down Expand Up @@ -44,11 +45,11 @@ def test_table_names(self):

def test_django_table_names(self):
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()
cursor.execute("DROP TABLE django_introspection_test_table;")
self.assert_('django_introspection_testcase_table' not in tl,
"django_table_names() returned a non-Django table")
cursor.execute("DROP TABLE django_introspection_testcase_table;")

def test_installed_models(self):
tables = [Article._meta.db_table, Reporter._meta.db_table]
Expand All @@ -68,20 +69,20 @@ def test_get_table_description_names(self):
[f.column for f in Reporter._meta.fields])

def test_get_table_description_types(self):
cursor = connection.cursor()
cursor = connection.cursor()
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],
['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):
cursor = connection.cursor()
relations = connection.introspection.get_relations(cursor, Article._meta.db_table)
Expand All @@ -96,4 +97,12 @@ def test_get_relations(self):
def test_get_indexes(self):
cursor = connection.cursor()
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

0 comments on commit fd89651

Please sign in to comment.