aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--debug_toolbar/panels/sql.py32
-rw-r--r--debug_toolbar/templates/debug_toolbar/panels/sql.html2
2 files changed, 28 insertions, 6 deletions
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py
index a3eff49..90a7b51 100644
--- a/debug_toolbar/panels/sql.py
+++ b/debug_toolbar/panels/sql.py
@@ -6,7 +6,14 @@ import traceback
import django
from django.conf import settings
-from django.db import connection
+try:
+ from django.db import connections
+except ImportError:
+ # Compatibility with Django < 1.2
+ from django.db import connection
+ connections = {'default': connection}
+ connection.alias = 'default'
+
from django.db.backends import util
from django.views.debug import linebreak_iter
from django.template import Node
@@ -194,16 +201,27 @@ class SQLDebugPanel(DebugPanel):
def __init__(self, *args, **kwargs):
super(self.__class__, self).__init__(*args, **kwargs)
- self._offset = len(connection.queries)
+ self._offset = dict((conn, len(connections[conn].queries)) for conn in connections)
self._sql_time = 0
self._queries = []
+ self._databases = {}
def nav_title(self):
return _('SQL')
def nav_subtitle(self):
- self._queries = connection.queries[self._offset:]
- self._sql_time = sum([q['duration'] for q in self._queries])
+ self._queries = []
+ self._databases = {}
+ for alias in connections:
+ db_queries = connections[alias].queries[self._offset[alias]:]
+ self._databases[alias] = {
+ 'time_spent': sum(q['duration'] for q in db_queries),
+ 'queries': len(db_queries),
+ }
+ self._queries.extend([(alias, q) for q in db_queries])
+
+ self._queries.sort(key=lambda x: x[1]['start_time'])
+ self._sql_time = sum([d['time_spent'] for d in self._databases.itervalues()])
num_queries = len(self._queries)
# TODO l10n: use ngettext
return "%d %s in %.2fms" % (
@@ -220,7 +238,8 @@ class SQLDebugPanel(DebugPanel):
def content(self):
width_ratio_tally = 0
- for query in self._queries:
+ for alias, query in self._queries:
+ query['alias'] = alias
query['sql'] = reformat_sql(query['sql'])
try:
query['width_ratio'] = (query['duration'] / self._sql_time) * 100
@@ -231,7 +250,8 @@ class SQLDebugPanel(DebugPanel):
context = self.context.copy()
context.update({
- 'queries': self._queries,
+ 'databases': sorted(self._databases.items(), key=lambda x: -x[1]['time_spent']),
+ 'queries': [q for a, q in self._queries],
'sql_time': self._sql_time,
'is_mysql': settings.DATABASE_ENGINE == 'mysql',
})
diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql.html b/debug_toolbar/templates/debug_toolbar/panels/sql.html
index 9ed87ca..626ec5c 100644
--- a/debug_toolbar/templates/debug_toolbar/panels/sql.html
+++ b/debug_toolbar/templates/debug_toolbar/panels/sql.html
@@ -5,6 +5,7 @@
<th>{% trans "Time" %}&nbsp;(ms)</th>
<th>{% trans "Action" %}</th>
<th>{% trans 'Stacktrace' %}</th>
+ <th>{% trans 'Alias' %}</th>
<th>{% trans 'Query' %}</th>
</tr>
</thead>
@@ -28,6 +29,7 @@
<div class="djSQLShowStacktraceDiv"><a class="djSQLShowStacktrace" href="#">Toggle Stacktrace</a></div>
{% endif %}
</td>
+ <td>{{ query.alias }}</td>
<td class="syntax">
<div class="djDebugSqlWrap">
<div class="djDebugSql">{{ query.sql|safe }}</div>