Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

[1.0.X] Fixed #9991: correctly introspect PostgreSQL 'real' types. Ba…

…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...
commit fd8965198f541d6f2920e689cdbe13ed1ff6faa9 1 parent b45cf13
@jacobian jacobian authored
View
1  django/db/backends/postgresql/introspection.py
@@ -7,6 +7,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
21: 'SmallIntegerField',
23: 'IntegerField',
25: 'TextField',
+ 700: 'FloatField',
701: 'FloatField',
869: 'IPAddressField',
1043: 'CharField',
View
35 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
@@ -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]
@@ -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)
@@ -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
Please sign in to comment.
Something went wrong with that request. Please try again.