1
1
from django .http import HttpResponseBadRequest , JsonResponse
2
2
from django .template .loader import render_to_string
3
3
from django .views .decorators .csrf import csrf_exempt
4
-
5
4
from debug_toolbar ._compat import login_not_required
6
5
from debug_toolbar .decorators import render_with_toolbar_language , require_show_toolbar
7
6
from debug_toolbar .forms import SignedDataForm
8
7
from debug_toolbar .panels .sql .forms import SQLSelectForm
8
+ from django .conf import settings
9
+ from django .utils .translation import gettext_lazy as _
10
+ from django .views .debug import get_default_exception_reporter_filter
9
11
10
-
12
+ # Ensure we handle session value for the copy button
11
13
def get_signed_data (request ):
12
14
"""Unpack a signed data form, if invalid returns None"""
13
15
data = request .GET if request .method == "GET" else request .POST
@@ -36,12 +38,19 @@ def sql_select(request):
36
38
headers = [d [0 ] for d in cursor .description ]
37
39
result = cursor .fetchall ()
38
40
41
+ # Handle session data for copying (increment session value)
42
+ if 'value' not in request .session :
43
+ request .session ['value' ] = 0 # Initialize if not set
44
+ request .session ['value' ] += 1 # Increment the value to show for copying
45
+
46
+ # Prepare context for rendering
39
47
context = {
40
48
"result" : result ,
41
49
"sql" : form .reformat_sql (),
42
50
"duration" : form .cleaned_data ["duration" ],
43
51
"headers" : headers ,
44
52
"alias" : form .cleaned_data ["alias" ],
53
+ "session_value" : request .session ['value' ] # Pass session value to template
45
54
}
46
55
content = render_to_string ("debug_toolbar/panels/sql_select.html" , context )
47
56
return JsonResponse ({"content" : content })
@@ -65,9 +74,6 @@ def sql_explain(request):
65
74
vendor = form .connection .vendor
66
75
with form .cursor as cursor :
67
76
if vendor == "sqlite" :
68
- # SQLite's EXPLAIN dumps the low-level opcodes generated for a query;
69
- # EXPLAIN QUERY PLAN dumps a more human-readable summary
70
- # See https://www.sqlite.org/lang_explain.html for details
71
77
cursor .execute (f"EXPLAIN QUERY PLAN { sql } " , params )
72
78
elif vendor == "postgresql" :
73
79
cursor .execute (f"EXPLAIN ANALYZE { sql } " , params )
@@ -110,8 +116,6 @@ def sql_profile(request):
110
116
cursor .execute ("SET PROFILING=1" ) # Enable profiling
111
117
cursor .execute (sql , params ) # Execute SELECT
112
118
cursor .execute ("SET PROFILING=0" ) # Disable profiling
113
- # The Query ID should always be 1 here but I'll subselect to get
114
- # the last one just in case...
115
119
cursor .execute (
116
120
"""
117
121
SELECT *
0 commit comments