aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/views.py
diff options
context:
space:
mode:
authorRob Hudson2008-09-11 23:21:12 -0700
committerRob Hudson2008-09-11 23:21:12 -0700
commit4591e34f0140c43e68e4ecd97eae7f3ea05878f6 (patch)
treecfb460212471d9d41b32e2732620822e3cf38e22 /debug_toolbar/views.py
parent8377ea179568c1fbf8f46db1234e85d689daae0a (diff)
downloaddjango-debug-toolbar-4591e34f0140c43e68e4ecd97eae7f3ea05878f6.tar.bz2
Adding view to explain SQL passed in via query string. Hopefully this is
database backend agnostic. Next up is connecting this with the SQL panel via AJAX.
Diffstat (limited to 'debug_toolbar/views.py')
-rw-r--r--debug_toolbar/views.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/debug_toolbar/views.py b/debug_toolbar/views.py
new file mode 100644
index 0000000..5bdf450
--- /dev/null
+++ b/debug_toolbar/views.py
@@ -0,0 +1,30 @@
+import simplejson
+from django.db import connection
+from django.shortcuts import render_to_response
+from debug_toolbar.panels.sql import reformat_sql
+
+def 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
+ """
+ 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)
+ \ No newline at end of file