aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/panels/sql.py
diff options
context:
space:
mode:
Diffstat (limited to 'debug_toolbar/panels/sql.py')
-rw-r--r--debug_toolbar/panels/sql.py25
1 files changed, 10 insertions, 15 deletions
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py
index 1ced049..53b9f53 100644
--- a/debug_toolbar/panels/sql.py
+++ b/debug_toolbar/panels/sql.py
@@ -4,28 +4,13 @@ import uuid
from copy import copy
from django.db import connections
-from django.db.backends import BaseDatabaseWrapper
from django.utils.translation import ugettext_lazy as _, ungettext_lazy as __
from debug_toolbar.forms import SQLSelectForm
-from debug_toolbar.middleware import DebugToolbarMiddleware
from debug_toolbar.panels import DebugPanel
from debug_toolbar.utils import render_stacktrace
from debug_toolbar.utils.sql import reformat_sql
from debug_toolbar.utils.tracking.db import CursorWrapper
-from debug_toolbar.utils.tracking import replace_method
-
-
-@replace_method(BaseDatabaseWrapper, 'cursor')
-def cursor(original, self):
- result = original(self)
-
- djdt = DebugToolbarMiddleware.get_current()
- if not djdt:
- return result
- logger = djdt.get_panel(SQLDebugPanel)
-
- return CursorWrapper(result, self, logger=logger)
def get_isolation_level_display(engine, level):
@@ -131,6 +116,16 @@ class SQLDebugPanel(DebugPanel):
'SQL Queries from %(count)d connections',
count) % dict(count=count)
+ def enable_instrumentation(self):
+ # This is thread-safe because database connections are thread-local.
+ for connection in connections.all():
+ old_cursor = connection.cursor
+ connection.cursor = lambda: CursorWrapper(old_cursor(), connection, self)
+
+ def disable_instrumentation(self):
+ for connection in connections.all():
+ del connection.cursor
+
def process_response(self, request, response):
if self._queries:
width_ratio_tally = 0