From a350f941fcc6829382041a95dbe84d63d018e61f Mon Sep 17 00:00:00 2001
From: David Cramer
Date: Tue, 10 May 2011 00:28:53 -0700
Subject: Support multiple databases in profile, select, and explain calls
 (fixes #155)
---
 debug_toolbar/templates/debug_toolbar/panels/sql.html     |  6 +++---
 .../templates/debug_toolbar/panels/sql_explain.html       |  2 ++
 .../templates/debug_toolbar/panels/sql_profile.html       |  2 ++
 .../templates/debug_toolbar/panels/sql_select.html        |  2 ++
 debug_toolbar/views.py                                    | 15 +++++++++++----
 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 @@
 					
{% if query.params %}
 						{% if query.is_select %}
-							Sel
-							Expl
+							Sel
+							Expl
 							{% ifequal query.engine 'mysql' %}
-								Prof
+								Prof
 							{% 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 @@
 			{{ sql|safe }}
 			{% trans "Time" %}
 			{{ duration }} ms
+			{% trans "Database" %}
+			{{ alias }} 
 			
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 @@
 				{{ sql|safe }}
 				{% trans "Time" %}
 				{{ duration }} ms
+				{% trans "Database" %}
+				{{ alias }}
 			
 			
 				
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 @@
 			{{ sql|safe }}
 			{% trans "Time" %}
 			{{ duration }} ms
+			{% trans "Database" %}
+			{{ alias }}
 		
 		{% if result %}
 		
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.")
-- 
cgit v1.2.3
 |