diff options
| author | David Cramer | 2011-05-10 00:28:53 -0700 |
|---|---|---|
| committer | David Cramer | 2011-05-10 00:28:53 -0700 |
| commit | a350f941fcc6829382041a95dbe84d63d018e61f (patch) | |
| tree | 93199e67638b3ed5fdc4d86f79fd2cda7ba776ed | |
| parent | 31a19aab22a16a26f90329056620f155616dd394 (diff) | |
| download | django-debug-toolbar-a350f941fcc6829382041a95dbe84d63d018e61f.tar.bz2 | |
Support multiple databases in profile, select, and explain calls (fixes #155)
5 files changed, 20 insertions, 7 deletions
diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql.html b/debug_toolbar/templates/debug_toolbar/panels/sql.html index f904e15..f6f231c 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/sql.html +++ b/debug_toolbar/templates/debug_toolbar/panels/sql.html @@ -42,10 +42,10 @@ <td class="actions"> {% if query.params %} {% if query.is_select %} - <a class="remoteCall" href="/__debug__/sql_select/?sql={{ query.raw_sql|urlencode }}&params={{ query.params|urlencode }}&duration={{ query.duration|floatformat:"2"|urlencode }}&hash={{ query.hash }}">Sel</a> - <a class="remoteCall" href="/__debug__/sql_explain/?sql={{ query.raw_sql|urlencode }}&params={{ query.params|urlencode }}&duration={{ query.duration|floatformat:"2"|urlencode }}&hash={{ query.hash }}">Expl</a> + <a class="remoteCall" href="/__debug__/sql_select/?sql={{ query.raw_sql|urlencode }}&params={{ query.params|urlencode }}&duration={{ query.duration|floatformat:"2"|urlencode }}&hash={{ query.hash }}&alias={{ query.alias|urlencode }}">Sel</a> + <a class="remoteCall" href="/__debug__/sql_explain/?sql={{ query.raw_sql|urlencode }}&params={{ query.params|urlencode }}&duration={{ query.duration|floatformat:"2"|urlencode }}&hash={{ query.hash }}&alias={{ query.alias|urlencode }}">Expl</a> {% ifequal query.engine 'mysql' %} - <a class="remoteCall" href="/__debug__/sql_profile/?sql={{ query.raw_sql|urlencode }}&params={{ query.params|urlencode }}&duration={{ query.duration|floatformat:"2"|urlencode }}&hash={{ query.hash }}">Prof</a> + <a class="remoteCall" href="/__debug__/sql_profile/?sql={{ query.raw_sql|urlencode }}&params={{ query.params|urlencode }}&duration={{ query.duration|floatformat:"2"|urlencode }}&hash={{ query.hash }}&alias={{ query.alias|urlencode }}">Prof</a> {% endifequal %} {% endif %} {% endif %} diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html b/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html index abd4a20..0d47ada 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html +++ b/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html @@ -10,6 +10,8 @@ <dd>{{ sql|safe }}</dd> <dt>{% trans "Time" %}</dt> <dd>{{ duration }} ms</dd> + <dt>{% trans "Database" %}</dt> + <dd>{{ alias }}</dd> </dl> <table class="djSqlExplain"> <thead> diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html b/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html index 5c5724e..c0d90b4 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html +++ b/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html @@ -11,6 +11,8 @@ <dd>{{ sql|safe }}</dd> <dt>{% trans "Time" %}</dt> <dd>{{ duration }} ms</dd> + <dt>{% trans "Database" %}</dt> + <dd>{{ alias }}</dd> </dl> <table class="djSqlProfile"> <thead> diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql_select.html b/debug_toolbar/templates/debug_toolbar/panels/sql_select.html index db5199c..7a57c75 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/sql_select.html +++ b/debug_toolbar/templates/debug_toolbar/panels/sql_select.html @@ -10,6 +10,8 @@ <dd>{{ sql|safe }}</dd> <dt>{% trans "Time" %}</dt> <dd>{{ duration }} ms</dd> + <dt>{% trans "Database" %}</dt> + <dd>{{ alias }}</dd> </dl> {% if result %} <table class="djSqlSelect"> diff --git a/debug_toolbar/views.py b/debug_toolbar/views.py index bc6cdb3..e0c80aa 100644 --- a/debug_toolbar/views.py +++ b/debug_toolbar/views.py @@ -7,12 +7,13 @@ views in any other way is generally not advised. import os import django.views.static from django.conf import settings -from django.db import connection from django.http import HttpResponseBadRequest from django.shortcuts import render_to_response from django.utils import simplejson from django.utils.hashcompat import sha_constructor +from debug_toolbar.utils.compat.db import connections + class InvalidSQLError(Exception): def __init__(self, value): self.value = value @@ -39,12 +40,13 @@ def sql_select(request): from debug_toolbar.panels.sql import reformat_sql sql = request.GET.get('sql', '') params = request.GET.get('params', '') + alias = request.GET.get('alias', 'default') hash = sha_constructor(settings.SECRET_KEY + sql + params).hexdigest() if hash != request.GET.get('hash', ''): return HttpResponseBadRequest('Tamper alert') # SQL Tampering alert if sql.lower().strip().startswith('select'): params = simplejson.loads(params) - cursor = connection.cursor() + cursor = connections[alias].cursor() cursor.execute(sql, params) headers = [d[0] for d in cursor.description] result = cursor.fetchall() @@ -54,6 +56,7 @@ def sql_select(request): 'sql': reformat_sql(cursor.db.ops.last_executed_query(cursor, sql, params)), 'duration': request.GET.get('duration', 0.0), 'headers': headers, + 'alias': alias, } return render_to_response('debug_toolbar/panels/sql_select.html', context) raise InvalidSQLError("Only 'select' queries are allowed.") @@ -71,12 +74,13 @@ def sql_explain(request): from debug_toolbar.panels.sql import reformat_sql sql = request.GET.get('sql', '') params = request.GET.get('params', '') + alias = request.GET.get('alias', 'default') hash = sha_constructor(settings.SECRET_KEY + sql + params).hexdigest() if hash != request.GET.get('hash', ''): return HttpResponseBadRequest('Tamper alert') # SQL Tampering alert if sql.lower().strip().startswith('select'): params = simplejson.loads(params) - cursor = connection.cursor() + cursor = connections[alias].cursor() if settings.DATABASE_ENGINE == "sqlite3": # SQLite's EXPLAIN dumps the low-level opcodes generated for a query; @@ -94,6 +98,7 @@ def sql_explain(request): 'sql': reformat_sql(cursor.db.ops.last_executed_query(cursor, sql, params)), 'duration': request.GET.get('duration', 0.0), 'headers': headers, + 'alias': alias, } return render_to_response('debug_toolbar/panels/sql_explain.html', context) raise InvalidSQLError("Only 'select' queries are allowed.") @@ -111,12 +116,13 @@ def sql_profile(request): from debug_toolbar.panels.sql import reformat_sql sql = request.GET.get('sql', '') params = request.GET.get('params', '') + alias = request.GET.get('alias', 'default') hash = sha_constructor(settings.SECRET_KEY + sql + params).hexdigest() if hash != request.GET.get('hash', ''): return HttpResponseBadRequest('Tamper alert') # SQL Tampering alert if sql.lower().strip().startswith('select'): params = simplejson.loads(params) - cursor = connection.cursor() + cursor = connections[alias].cursor() result = None headers = None result_error = None @@ -137,6 +143,7 @@ def sql_profile(request): 'sql': reformat_sql(cursor.db.ops.last_executed_query(cursor, sql, params)), 'duration': request.GET.get('duration', 0.0), 'headers': headers, + 'alias': alias, } return render_to_response('debug_toolbar/panels/sql_profile.html', context) raise InvalidSQLError("Only 'select' queries are allowed.") |
