aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/panels/sql.py
diff options
context:
space:
mode:
authorDavid Cramer2011-03-23 18:02:06 -0700
committerDavid Cramer2011-03-23 18:35:26 -0700
commit926643b1881422b2712a952a3c82697cbcad8285 (patch)
tree6ab1ed280a452d6f54e5a1b01ba980810804cfca /debug_toolbar/panels/sql.py
parente1f06b1ae3d518691dcff3a834441355580dcf1e (diff)
downloaddjango-debug-toolbar-926643b1881422b2712a952a3c82697cbcad8285.tar.bz2
Overhaul SQL panel to include better timeline, more compact queries, and better view of stacktrace
Diffstat (limited to 'debug_toolbar/panels/sql.py')
-rw-r--r--debug_toolbar/panels/sql.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py
index e1e9bdf..86ecbbf 100644
--- a/debug_toolbar/panels/sql.py
+++ b/debug_toolbar/panels/sql.py
@@ -1,5 +1,6 @@
from datetime import datetime
import os
+import re
import sys
import SocketServer
import traceback
@@ -10,10 +11,12 @@ from django.db import connection
from django.db.backends import util
from django.views.debug import linebreak_iter
from django.template import Node
+from django.template.defaultfilters import escape
from django.template.loader import render_to_string
from django.utils import simplejson
from django.utils.encoding import force_unicode
from django.utils.hashcompat import sha_constructor
+from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
from debug_toolbar.panels import DebugPanel
@@ -172,7 +175,14 @@ class SQLDebugPanel(DebugPanel):
except ZeroDivisionError:
query['width_ratio'] = 0
query['start_offset'] = width_ratio_tally
+ query['end_offset'] = query['width_ratio'] + query['start_offset']
width_ratio_tally += query['width_ratio']
+
+ stacktrace = []
+ for frame in query['stacktrace']:
+ params = map(escape, frame[0].rsplit('/', 1) + list(frame[1:]))
+ stacktrace.append('<span class="path">{0}/</span><span class="file">{1}</span> in <span class="func">{3}</span>(<span class="lineno">{2}</span>)\n <span class="code">{4}</span>"'.format(*params))
+ query['stacktrace'] = mark_safe('\n'.join(stacktrace))
context = self.context.copy()
context.update({
@@ -201,8 +211,11 @@ class BoldKeywordFilter(sqlparse.filters.Filter):
if is_keyword:
yield sqlparse.tokens.Text, '</strong>'
+def swap_fields(sql):
+ return re.sub('SELECT</strong> (.*) <strong>FROM', 'SELECT</strong> <span class="djDebugCollapse">\g<1></span> <strong>FROM', sql)
+
def reformat_sql(sql):
stack = sqlparse.engine.FilterStack()
stack.preprocess.append(BoldKeywordFilter()) # add our custom filter
stack.postprocess.append(sqlparse.filters.SerializerUnicode()) # tokens -> strings
- return ''.join(stack.run(sql))
+ return swap_fields(''.join(stack.run(sql)))