summaryrefslogtreecommitdiff
path: root/django/db/backends/oracle/introspection.py
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2016-11-30 17:21:57 +0100
committerTim Graham <timograham@gmail.com>2016-11-30 11:21:57 -0500
commite17f40f4b55f5bf624a190e67a0c83af4be043b8 (patch)
tree84dbe776c049ac5fa6e69a29fbb4e8d9089e8492 /django/db/backends/oracle/introspection.py
parent6f43b2b8a55d72d1e8e04163ff0c2091cf6b8ce5 (diff)
downloaddjango-e17f40f4b55f5bf624a190e67a0c83af4be043b8.tar.gz
Refs #24245 -- Added introspection for database defaults on Oracle.
Diffstat (limited to 'django/db/backends/oracle/introspection.py')
-rw-r--r--django/db/backends/oracle/introspection.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/django/db/backends/oracle/introspection.py b/django/db/backends/oracle/introspection.py
index f0d5f080b6..2d91cc049f 100644
--- a/django/db/backends/oracle/introspection.py
+++ b/django/db/backends/oracle/introspection.py
@@ -60,6 +60,13 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
def get_table_description(self, cursor, table_name):
"Returns a description of the table, with the DB-API cursor.description interface."
+ # user_tab_columns gives data default for columns
+ cursor.execute("""
+ SELECT column_name, data_default
+ FROM user_tab_cols
+ WHERE table_name = UPPER(%s)""", [table_name])
+ columns_default = {column: default if default != 'NULL' else None for column, default in cursor.fetchall()}
+
self.cache_bust_counter += 1
cursor.execute("SELECT * FROM {} WHERE ROWNUM < 2 AND {} > 0".format(
self.connection.ops.quote_name(table_name),
@@ -67,8 +74,9 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
description = []
for desc in cursor.description:
name = force_text(desc[0]) # cx_Oracle always returns a 'str' on both Python 2 and 3
+ default = columns_default[name]
name = name % {} # cx_Oracle, for some reason, doubles percent signs.
- description.append(FieldInfo(*(name.lower(),) + desc[1:]))
+ description.append(FieldInfo(*(name.lower(),) + desc[1:] + (default,)))
return description
def table_name_converter(self, name):