diff options
| author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2014-06-08 22:42:12 +0200 |
|---|---|---|
| committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2014-06-09 21:38:10 +0200 |
| commit | 40bfd8561d016f6632c95d03e46a720571ad1a8a (patch) | |
| tree | a56e3a87281529f13b8c6a19d180ab9e9e54f052 /django | |
| parent | 127218b92bb8482fcb8b02457ed9797486ed3a22 (diff) | |
Fixed #20420 -- Normalized query counts on Oracle.
This is achieved by inserting a fake entry in connection.queries when
not releasing a savepoint (since Oracle doesn't support that operation.)
Also removed the can_release_savepoints feature that was recently added,
but is superseded by this solution.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/backends/__init__.py | 7 | ||||
| -rw-r--r-- | django/db/backends/oracle/base.py | 10 |
2 files changed, 12 insertions, 5 deletions
diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py index 39628e76fc..f4f2ba2fe0 100644 --- a/django/db/backends/__init__.py +++ b/django/db/backends/__init__.py @@ -74,6 +74,10 @@ class BaseDatabaseWrapper(object): self._thread_ident = thread.get_ident() @property + def queries_logged(self): + return self.use_debug_cursor or settings.DEBUG + + @property def queries(self): if len(self.queries_log) == self.queries_log.maxlen: warnings.warn( @@ -156,7 +160,7 @@ class BaseDatabaseWrapper(object): Creates a cursor, opening a connection if necessary. """ self.validate_thread_sharing() - if self.use_debug_cursor or settings.DEBUG: + if self.queries_logged: cursor = self.make_debug_cursor(self._cursor()) else: cursor = self.make_cursor(self._cursor()) @@ -493,7 +497,6 @@ class BaseDatabaseFeatures(object): can_return_id_from_insert = False has_bulk_insert = False uses_savepoints = False - can_release_savepoints = True can_combine_inserts_with_and_without_auto_increment_pk = False # If True, don't use integer foreign keys referring to, e.g., positive diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index f7790415db..b0b9a5f5a1 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -96,7 +96,6 @@ class DatabaseFeatures(BaseDatabaseFeatures): needs_datetime_string_cast = False interprets_empty_strings_as_nulls = True uses_savepoints = True - can_release_savepoints = False has_select_for_update = True has_select_for_update_nowait = True can_return_id_from_insert = True @@ -691,9 +690,14 @@ class DatabaseWrapper(BaseDatabaseWrapper): "Returns a new instance of this backend's SchemaEditor" return DatabaseSchemaEditor(self, *args, **kwargs) - # Oracle doesn't support savepoint commits. Ignore them. + # Oracle doesn't support releasing savepoints. But we fake them when query + # logging is enabled to keep query counts consistent with other backends. def _savepoint_commit(self, sid): - pass + if self.queries_logged: + self.queries_log.append({ + 'sql': '-- RELEASE SAVEPOINT %s (faked)' % self.ops.quote_name(sid), + 'time': '0.000', + }) def _set_autocommit(self, autocommit): with self.wrap_database_errors: |
