Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Add introspection support for BinaryField

  • Loading branch information...
commit c5a25c2771f0362a5775f81f9f4eb6b3c9caed62 1 parent d680a3f
@claudep claudep authored
View
1  django/db/backends/oracle/introspection.py
@@ -7,6 +7,7 @@
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',
View
1  django/db/backends/postgresql_psycopg2/introspection.py
@@ -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',
View
1  django/db/backends/sqlite3/introspection.py
@@ -30,6 +30,7 @@ class FlexibleFieldLookupDict(object):
'real': 'FloatField',
'text': 'TextField',
'char': 'CharField',
+ 'blob': 'BinaryField',
'date': 'DateField',
'datetime': 'DateTimeField',
'time': 'TimeField',
View
1  tests/introspection/models.py
@@ -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')
View
8 tests/introspection/tests.py
@@ -60,9 +60,13 @@ def test_get_table_description_names(self):
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
@@ -85,7 +89,7 @@ def test_get_table_description_nullable(self):
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
Please sign in to comment.
Something went wrong with that request. Please try again.