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:
parent
374b02e374
commit
ffffdedfd1
|
@ -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',
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue