From ffffdedfd16ec9e8471368afab15782adddf3452 Mon Sep 17 00:00:00 2001 From: Jacob Kaplan-Moss Date: Fri, 3 Apr 2009 20:52:54 +0000 Subject: [PATCH] Fixed #9991: correctly introspect PostgreSQL 'real' types. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10379 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- .../db/backends/postgresql/introspection.py | 1 + tests/regressiontests/introspection/tests.py | 35 ++++++++++++------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/django/db/backends/postgresql/introspection.py b/django/db/backends/postgresql/introspection.py index 7b3ab3bb8a..a6cafcd949 100644 --- a/django/db/backends/postgresql/introspection.py +++ b/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', diff --git a/tests/regressiontests/introspection/tests.py b/tests/regressiontests/introspection/tests.py index 658470d1ee..ee37a30499 100644 --- a/tests/regressiontests/introspection/tests.py +++ b/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 @@ class IntrospectionTests(TestCase): 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 @@ class IntrospectionTests(TestCase): [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 @@ class IntrospectionTests(TestCase): 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}) \ No newline at end of file + 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