diff options
Diffstat (limited to 'debug_toolbar/views.py')
| -rw-r--r-- | debug_toolbar/views.py | 31 | 
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)  | 
