diff options
author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2017-06-01 11:51:02 +0200 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2017-06-01 19:33:48 +0200 |
commit | 9af6c97504ef2b06dd5292d03ea94d3eb5d8c4d6 (patch) | |
tree | 2204beae578a38639311d8eb3992d2d7e0896436 /django/db/backends/oracle/introspection.py | |
parent | 924a89e135fe54bc7622aa6f03405211e75c06e9 (diff) | |
download | django-9af6c97504ef2b06dd5292d03ea94d3eb5d8c4d6.tar.gz |
Refs #26682 -- Added AutoField introspection on Oracle.
Diffstat (limited to 'django/db/backends/oracle/introspection.py')
-rw-r--r-- | django/db/backends/oracle/introspection.py | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/django/db/backends/oracle/introspection.py b/django/db/backends/oracle/introspection.py index 50d9d8092c..f15b49eb19 100644 --- a/django/db/backends/oracle/introspection.py +++ b/django/db/backends/oracle/introspection.py @@ -1,12 +1,15 @@ import warnings +from collections import namedtuple import cx_Oracle from django.db.backends.base.introspection import ( - BaseDatabaseIntrospection, FieldInfo, TableInfo, + BaseDatabaseIntrospection, FieldInfo as BaseFieldInfo, TableInfo, ) from django.utils.deprecation import RemovedInDjango21Warning +FieldInfo = namedtuple('FieldInfo', BaseFieldInfo._fields + ('is_autofield',)) + class DatabaseIntrospection(BaseDatabaseIntrospection): # Maps type objects to Django Field types. @@ -32,9 +35,11 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): precision, scale = description[4:6] if scale == 0: if precision > 11: - return 'BigIntegerField' + return 'BigAutoField' if description.is_autofield else 'BigIntegerField' elif precision == 1: return 'BooleanField' + elif description.is_autofield: + return 'AutoField' else: return 'IntegerField' elif scale == -127: @@ -61,12 +66,16 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): CASE WHEN char_used IS NULL THEN data_length ELSE char_length - END as internal_size + END as internal_size, + CASE + WHEN identity_column = 'YES' THEN 1 + ELSE 0 + END as is_autofield FROM user_tab_cols WHERE table_name = UPPER(%s)""", [table_name]) field_map = { - column: (internal_size, default if default != 'NULL' else None) - for column, default, internal_size in cursor.fetchall() + column: (internal_size, default if default != 'NULL' else None, is_autofield) + for column, default, internal_size, is_autofield in cursor.fetchall() } self.cache_bust_counter += 1 cursor.execute("SELECT * FROM {} WHERE ROWNUM < 2 AND {} > 0".format( @@ -75,14 +84,14 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): description = [] for desc in cursor.description: name = desc[0] - internal_size, default = field_map[name] + internal_size, default, is_autofield = field_map[name] name = name % {} # cx_Oracle, for some reason, doubles percent signs. description.append(FieldInfo(*( (name.lower(),) + desc[1:3] + (internal_size, desc[4] or 0, desc[5] or 0) + desc[6:] + - (default,) + (default, is_autofield) ))) return description |