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 /debug_toolbar/views.py | |
| parent | 31a19aab22a16a26f90329056620f155616dd394 (diff) | |
| download | django-debug-toolbar-a350f941fcc6829382041a95dbe84d63d018e61f.tar.bz2 | |
Support multiple databases in profile, select, and explain calls (fixes #155)
Diffstat (limited to 'debug_toolbar/views.py')
| -rw-r--r-- | debug_toolbar/views.py | 15 | 
1 files changed, 11 insertions, 4 deletions
| 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.") | 
