aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/views.py
diff options
context:
space:
mode:
authorBryan Veloso2008-09-22 18:19:43 -0700
committerBryan Veloso2008-09-22 18:19:43 -0700
commit0f7afe0ff0c722b86cf90085ae72e7d397403500 (patch)
tree7913f88f671e6b6d878aacecd6829aa54e25a963 /debug_toolbar/views.py
parent276e1c284aa976f69c68230591b9f7fd1fbbc676 (diff)
parent5a711759e75bfef4788498d9cfaa9fe019bcd15d (diff)
downloaddjango-debug-toolbar-0f7afe0ff0c722b86cf90085ae72e7d397403500.tar.bz2
Merge branch 'master' of git@github.com:revyver/django-debug-toolbar
Diffstat (limited to 'debug_toolbar/views.py')
-rw-r--r--debug_toolbar/views.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/debug_toolbar/views.py b/debug_toolbar/views.py
index 40cc7b1..1b44ed1 100644
--- a/debug_toolbar/views.py
+++ b/debug_toolbar/views.py
@@ -5,12 +5,41 @@ views in any other way is generally not advised.
"""
import os
+import simplejson
import django.views.static
from django.conf import settings
+from django.db import connection
+from django.shortcuts import render_to_response
def debug_media(request, path):
root = getattr(settings, 'DEBUG_TOOLBAR_MEDIA_ROOT', None)
if root is None:
parent = os.path.abspath(os.path.dirname(__file__))
root = os.path.join(parent, 'media')
- return django.views.static.serve(request, path, root) \ No newline at end of file
+ return django.views.static.serve(request, path, root)
+
+def sql_explain(request):
+ """
+ Returns the output of the SQL EXPLAIN on the given query.
+
+ Expected GET variables:
+ sql: urlencoded sql with position arguments
+ params: JSON encoded parameter values
+ time: time for SQL to execute passed in from toolbar just for redisplay
+ """
+ from debug_toolbar.panels.sql import reformat_sql
+ sql = request.GET.get('sql', '')
+ if sql.lower().startswith('select'):
+ params = simplejson.loads(request.GET.get('params', ''))
+ cursor = connection.cursor()
+ cursor.execute("EXPLAIN %s" % (sql,), params)
+ headers = [d[0] for d in cursor.description]
+ result = cursor.fetchall()
+ cursor.close()
+ context = {
+ 'result': result,
+ 'sql': reformat_sql(cursor.db.ops.last_executed_query(cursor, sql, params)),
+ 'time': request.GET.get('time', 0.0),
+ 'headers': headers,
+ }
+ return render_to_response('debug_toolbar/panels/sql_explain.html', context)