From 926643b1881422b2712a952a3c82697cbcad8285 Mon Sep 17 00:00:00 2001
From: David Cramer
Date: Wed, 23 Mar 2011 18:02:06 -0700
Subject: Overhaul SQL panel to include better timeline, more compact queries,
and better view of stacktrace
---
debug_toolbar/panels/sql.py | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
(limited to 'debug_toolbar/panels')
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('{0}/{1} in {3}({2})\n {4}"'.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, ''
+def swap_fields(sql):
+ return re.sub('SELECT (.*) FROM', 'SELECT \g<1> 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)))
--
cgit v1.2.3