From 9da87bbea2fcf2799335bb60e25ea745992c5f91 Mon Sep 17 00:00:00 2001 From: Tomasz Buchert Date: Thu, 21 Apr 2011 11:31:26 +0200 Subject: [PATCH] Multi-db support for SQL views. --- .../templates/debug_toolbar/panels/sql.html | 6 +++--- .../debug_toolbar/panels/sql_explain.html | 2 +- .../debug_toolbar/panels/sql_profile.html | 2 +- .../debug_toolbar/panels/sql_select.html | 2 +- debug_toolbar/views.py | 18 ++++++++++++------ 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql.html b/debug_toolbar/templates/debug_toolbar/panels/sql.html index 626ec5c1b..2b3cd4427 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/sql.html +++ b/debug_toolbar/templates/debug_toolbar/panels/sql.html @@ -16,10 +16,10 @@ {% if query.params %} {% if query.is_select %} - SELECT
- EXPLAIN
+ SELECT
+ EXPLAIN
{% if is_mysql %} - PROFILE
+ PROFILE
{% endif %} {% 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 abd4a20a4..e35ff6120 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html +++ b/debug_toolbar/templates/debug_toolbar/panels/sql_explain.html @@ -6,7 +6,7 @@

{% trans "SQL Explained" %}

-
{% trans "Executed SQL" %}
+
{% trans "Executed SQL on database" %} {{ alias }}
{{ sql|safe }}
{% trans "Time" %}
{{ duration }} ms
diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html b/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html index 5c5724e79..b225e3836 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html +++ b/debug_toolbar/templates/debug_toolbar/panels/sql_profile.html @@ -7,7 +7,7 @@

{% trans "SQL Profiled" %}

{% if result %}
-
{% trans "Executed SQL" %}
+
{% trans "Executed SQL on database" %} {{ alias }}
{{ sql|safe }}
{% trans "Time" %}
{{ duration }} ms
diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql_select.html b/debug_toolbar/templates/debug_toolbar/panels/sql_select.html index db5199cd2..94afbb117 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/sql_select.html +++ b/debug_toolbar/templates/debug_toolbar/panels/sql_select.html @@ -6,7 +6,7 @@

{% trans "SQL Selected" %}

-
{% trans "Executed SQL" %}
+
{% trans "Executed SQL on database" %} {{ alias }}
{{ sql|safe }}
{% trans "Time" %}
{{ duration }} ms
diff --git a/debug_toolbar/views.py b/debug_toolbar/views.py index bc6cdb33f..874cb1b5d 100644 --- a/debug_toolbar/views.py +++ b/debug_toolbar/views.py @@ -4,10 +4,10 @@ views in any other way is generally not advised. """ -import os +import os import django.views.static from django.conf import settings -from django.db import connection +from django.db import connections from django.http import HttpResponseBadRequest from django.shortcuts import render_to_response from django.utils import simplejson @@ -38,18 +38,20 @@ def sql_select(request): """ from debug_toolbar.panels.sql import reformat_sql sql = request.GET.get('sql', '') + alias = request.GET.get('alias', 'default') params = request.GET.get('params', '') 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() cursor.close() context = { + 'alias': alias, 'result': result, 'sql': reformat_sql(cursor.db.ops.last_executed_query(cursor, sql, params)), 'duration': request.GET.get('duration', 0.0), @@ -70,15 +72,16 @@ def sql_explain(request): """ from debug_toolbar.panels.sql import reformat_sql sql = request.GET.get('sql', '') + alias = request.GET.get('alias', 'default') params = request.GET.get('params', '') 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": + if settings.DATABASES[alias]['ENGINE'] == "django.db.backends.sqlite3": # SQLite's EXPLAIN dumps the low-level opcodes generated for a query; # EXPLAIN QUERY PLAN dumps a more human-readable summary # See http://www.sqlite.org/lang_explain.html for details @@ -90,6 +93,7 @@ def sql_explain(request): result = cursor.fetchall() cursor.close() context = { + 'alias' : alias, 'result': result, 'sql': reformat_sql(cursor.db.ops.last_executed_query(cursor, sql, params)), 'duration': request.GET.get('duration', 0.0), @@ -110,13 +114,14 @@ def sql_profile(request): """ from debug_toolbar.panels.sql import reformat_sql sql = request.GET.get('sql', '') + alias = request.GET.get('alias', 'default') params = request.GET.get('params', '') 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 @@ -132,6 +137,7 @@ def sql_profile(request): result_error = "Profiling is either not available or not supported by your database." cursor.close() context = { + 'alias' : alias, 'result': result, 'result_error': result_error, 'sql': reformat_sql(cursor.db.ops.last_executed_query(cursor, sql, params)),