Loading django/db/backends/oracle/introspection.py +1 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ foreign_key_re = re.compile(r"\sCONSTRAINT `[^`]*` FOREIGN KEY \(`([^`]*)`\) REF class DatabaseIntrospection(BaseDatabaseIntrospection): # Maps type objects to Django Field types. data_types_reverse = { cx_Oracle.BLOB: 'BinaryField', cx_Oracle.CLOB: 'TextField', cx_Oracle.DATETIME: 'DateField', cx_Oracle.FIXED_CHAR: 'CharField', Loading django/db/backends/postgresql_psycopg2/introspection.py +1 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): # Maps type codes to Django Field types. data_types_reverse = { 16: 'BooleanField', 17: 'BinaryField', 20: 'BigIntegerField', 21: 'SmallIntegerField', 23: 'IntegerField', Loading django/db/backends/sqlite3/introspection.py +1 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ class FlexibleFieldLookupDict(object): 'real': 'FloatField', 'text': 'TextField', 'char': 'CharField', 'blob': 'BinaryField', 'date': 'DateField', 'datetime': 'DateTimeField', 'time': 'TimeField', Loading tests/introspection/models.py +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ class Reporter(models.Model): last_name = models.CharField(max_length=30) email = models.EmailField() facebook_user_id = models.BigIntegerField(null=True) raw_data = models.BinaryField(null=True) class Meta: unique_together = ('first_name', 'last_name') Loading tests/introspection/tests.py +6 −2 Original line number Diff line number Diff line Loading @@ -60,9 +60,13 @@ class IntrospectionTests(TestCase): def test_get_table_description_types(self): cursor = connection.cursor() desc = connection.introspection.get_table_description(cursor, Reporter._meta.db_table) # The MySQL exception is due to the cursor.description returning the same constant for # text and blob columns. TODO: use information_schema database to retrieve the proper # field type on MySQL self.assertEqual( [datatype(r[1], r) for r in desc], ['IntegerField', 'CharField', 'CharField', 'CharField', 'BigIntegerField'] ['IntegerField', 'CharField', 'CharField', 'CharField', 'BigIntegerField', 'BinaryField' if connection.vendor != 'mysql' else 'TextField'] ) # The following test fails on Oracle due to #17202 (can't correctly Loading @@ -85,7 +89,7 @@ class IntrospectionTests(TestCase): desc = connection.introspection.get_table_description(cursor, Reporter._meta.db_table) self.assertEqual( [r[6] for r in desc], [False, False, False, False, True] [False, False, False, False, True, True] ) # Regression test for #9991 - 'real' types in postgres Loading Loading
django/db/backends/oracle/introspection.py +1 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ foreign_key_re = re.compile(r"\sCONSTRAINT `[^`]*` FOREIGN KEY \(`([^`]*)`\) REF class DatabaseIntrospection(BaseDatabaseIntrospection): # Maps type objects to Django Field types. data_types_reverse = { cx_Oracle.BLOB: 'BinaryField', cx_Oracle.CLOB: 'TextField', cx_Oracle.DATETIME: 'DateField', cx_Oracle.FIXED_CHAR: 'CharField', Loading
django/db/backends/postgresql_psycopg2/introspection.py +1 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): # Maps type codes to Django Field types. data_types_reverse = { 16: 'BooleanField', 17: 'BinaryField', 20: 'BigIntegerField', 21: 'SmallIntegerField', 23: 'IntegerField', Loading
django/db/backends/sqlite3/introspection.py +1 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ class FlexibleFieldLookupDict(object): 'real': 'FloatField', 'text': 'TextField', 'char': 'CharField', 'blob': 'BinaryField', 'date': 'DateField', 'datetime': 'DateTimeField', 'time': 'TimeField', Loading
tests/introspection/models.py +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ class Reporter(models.Model): last_name = models.CharField(max_length=30) email = models.EmailField() facebook_user_id = models.BigIntegerField(null=True) raw_data = models.BinaryField(null=True) class Meta: unique_together = ('first_name', 'last_name') Loading
tests/introspection/tests.py +6 −2 Original line number Diff line number Diff line Loading @@ -60,9 +60,13 @@ class IntrospectionTests(TestCase): def test_get_table_description_types(self): cursor = connection.cursor() desc = connection.introspection.get_table_description(cursor, Reporter._meta.db_table) # The MySQL exception is due to the cursor.description returning the same constant for # text and blob columns. TODO: use information_schema database to retrieve the proper # field type on MySQL self.assertEqual( [datatype(r[1], r) for r in desc], ['IntegerField', 'CharField', 'CharField', 'CharField', 'BigIntegerField'] ['IntegerField', 'CharField', 'CharField', 'CharField', 'BigIntegerField', 'BinaryField' if connection.vendor != 'mysql' else 'TextField'] ) # The following test fails on Oracle due to #17202 (can't correctly Loading @@ -85,7 +89,7 @@ class IntrospectionTests(TestCase): desc = connection.introspection.get_table_description(cursor, Reporter._meta.db_table) self.assertEqual( [r[6] for r in desc], [False, False, False, False, True] [False, False, False, False, True, True] ) # Regression test for #9991 - 'real' types in postgres Loading