diff options
| author | Rob Hudson | 2011-04-06 07:52:45 -0700 | 
|---|---|---|
| committer | Rob Hudson | 2011-04-06 07:52:45 -0700 | 
| commit | 634bd0d68cb30d25705a049d46aa72e9a64e9dbd (patch) | |
| tree | fb1b283c9b56a5998d0c225ef45eb9a214bbc54e | |
| parent | 569c0bbfe6e8760ec9d0785626067542c55b0523 (diff) | |
| download | django-debug-toolbar-634bd0d68cb30d25705a049d46aa72e9a64e9dbd.tar.bz2 | |
Added basic support for multi-db.
Thanks to David Cramer, Ionel Cristian Mărieș, noah256, and Sander
Steffann, who all supplied patches.
| -rw-r--r-- | debug_toolbar/panels/sql.py | 32 | ||||
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/panels/sql.html | 2 | 
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" %} (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> | 
