summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Smeaton <josh.smeaton@gmail.com>2015-02-10 10:54:51 +1100
committerShai Berger <shai@platonix.com>2015-02-10 23:24:34 +0200
commit1fbe8a2de334bfec5e9b77e36f8a3c1cf2cd70be (patch)
tree03e42cd4c487d6ee5952c048df212b1bb49796ce
parent1b8af4cfa023161924a45fb572399d2f3071bf5b (diff)
Fixed #24200 -- Made introspection bypass statement cache
-rw-r--r--django/db/backends/oracle/features.py1
-rw-r--r--django/db/backends/oracle/introspection.py7
-rw-r--r--django/db/backends/oracle/schema.py3
-rw-r--r--docs/releases/1.8.txt4
4 files changed, 10 insertions, 5 deletions
diff --git a/django/db/backends/oracle/features.py b/django/db/backends/oracle/features.py
index ffa5c6474c..0b152e612e 100644
--- a/django/db/backends/oracle/features.py
+++ b/django/db/backends/oracle/features.py
@@ -35,7 +35,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
supports_combined_alters = False
nulls_order_largest = True
requires_literal_defaults = True
- connection_persists_old_columns = True
closed_cursor_error_class = InterfaceError
bare_select_suffix = " FROM DUAL"
uppercases_column_names = True
diff --git a/django/db/backends/oracle/introspection.py b/django/db/backends/oracle/introspection.py
index 3596368b6b..c058418ec3 100644
--- a/django/db/backends/oracle/introspection.py
+++ b/django/db/backends/oracle/introspection.py
@@ -33,6 +33,8 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
except AttributeError:
pass
+ cache_bust_counter = 1
+
def get_field_type(self, data_type, description):
# If it's a NUMBER with scale == 0, consider it an IntegerField
if data_type == cx_Oracle.NUMBER:
@@ -59,7 +61,10 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
def get_table_description(self, cursor, table_name):
"Returns a description of the table, with the DB-API cursor.description interface."
- cursor.execute("SELECT * FROM %s WHERE ROWNUM < 2" % self.connection.ops.quote_name(table_name))
+ self.cache_bust_counter += 1
+ cursor.execute("SELECT * FROM {} WHERE ROWNUM < 2 AND {} > 0".format(
+ self.connection.ops.quote_name(table_name),
+ self.cache_bust_counter))
description = []
for desc in cursor.description:
name = force_text(desc[0]) # cx_Oracle always returns a 'str' on both Python 2 and 3
diff --git a/django/db/backends/oracle/schema.py b/django/db/backends/oracle/schema.py
index fa710dc443..e4b02fcc7b 100644
--- a/django/db/backends/oracle/schema.py
+++ b/django/db/backends/oracle/schema.py
@@ -87,9 +87,6 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
self.remove_field(model, old_field)
# Rename the new field
self.alter_field(model, new_temp_field, new_field)
- # Close the connection to force cx_Oracle to get column types right
- # on a new cursor
- self.connection.close()
def normalize_name(self, name):
"""
diff --git a/docs/releases/1.8.txt b/docs/releases/1.8.txt
index bbb932ada3..4f77f063a3 100644
--- a/docs/releases/1.8.txt
+++ b/docs/releases/1.8.txt
@@ -286,6 +286,10 @@ Database backends
* The MySQL backend no longer creates explicit indexes for foreign keys when
using the InnoDB storage engine, as MySQL already creates them automatically.
+* The Oracle backend no longer defines the ``connection_persists_old_columns``
+ feature as ``True``. Instead, Oracle will now include a cache busting clause
+ when getting the description of a table.
+
Email
^^^^^