diff options
| author | Rob Hudson | 2008-09-11 23:21:12 -0700 |
|---|---|---|
| committer | Rob Hudson | 2008-09-11 23:21:12 -0700 |
| commit | 4591e34f0140c43e68e4ecd97eae7f3ea05878f6 (patch) | |
| tree | cfb460212471d9d41b32e2732620822e3cf38e22 /debug_toolbar | |
| parent | 8377ea179568c1fbf8f46db1234e85d689daae0a (diff) | |
| download | django-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')
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/panels/sql_explain.html | 25 | ||||
| -rw-r--r-- | debug_toolbar/urls.py | 6 | ||||
| -rw-r--r-- | debug_toolbar/views.py | 30 |
3 files changed, 61 insertions, 0 deletions
diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html b/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html new file mode 100644 index 0000000..757d43f --- /dev/null +++ b/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html @@ -0,0 +1,25 @@ +<h3>SQL Explained</h3> +<dl> + <dt>Executed SQL</dt> + <dd><pre>{{ sql|wordwrap:80 }}</pre></dd> + <dt>Time</dt> + <dd>{{ time }} ms</dd> +</dl> +<table> + <thead> + <tr> + {% for h in headers %} + <th>{{ h|upper }}</th> + {% endfor %} + </tr> + </thead> + <tbody> + {% for row in result %} + <tr class="{% cycle 'row1' 'row2' %}"> + {% for column in row %} + <td>{{ column|escape }}</td> + {% endfor %} + </tr> + {% endfor %} + </tbody> +</table> diff --git a/debug_toolbar/urls.py b/debug_toolbar/urls.py new file mode 100644 index 0000000..24d4b12 --- /dev/null +++ b/debug_toolbar/urls.py @@ -0,0 +1,6 @@ +from django.conf.urls.defaults import * + +urlpatterns = patterns('', + # EXPLAIN SQL via AJAX + url(r'explain/$', 'debug_toolbar.views.explain', name='explain_sql'), +) 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 |
