Skip to content

Commit c919827

Browse files
authored
Fix Postgres JSON Explain when getting tuple as params (#1722)
1 parent fbda63d commit c919827

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

debug_toolbar/panels/sql/tracking.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ def _quote_params(self, params):
120120
return params
121121
if isinstance(params, dict):
122122
return {key: self._quote_expr(value) for key, value in params.items()}
123+
if isinstance(params, tuple):
124+
return tuple(self._quote_expr(p) for p in params)
123125
return [self._quote_expr(p) for p in params]
124126

125127
def _decode(self, param):

docs/changes.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Change log
44
Pending
55
-------
66

7+
* Fixed PostgreSQL raw query with a tuple parameter during on explain.
8+
79
3.8.1 (2022-12-03)
810
------------------
911

tests/panels/test_sql.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,26 @@ def test_json_param_conversion(self):
221221
'["{\\"foo\\": \\"bar\\"}"]',
222222
)
223223

224+
@unittest.skipUnless(
225+
connection.vendor == "postgresql", "Test valid only on PostgreSQL"
226+
)
227+
def test_tuple_param_conversion(self):
228+
self.assertEqual(len(self.panel._queries), 0)
229+
230+
list(
231+
PostgresJSON.objects.raw(
232+
"SELECT * FROM tests_postgresjson WHERE field ->> 'key' IN %s",
233+
[("a", "b'")],
234+
)
235+
)
236+
237+
response = self.panel.process_request(self.request)
238+
self.panel.generate_stats(self.request, response)
239+
240+
# ensure query was logged
241+
self.assertEqual(len(self.panel._queries), 1)
242+
self.assertEqual(self.panel._queries[0]["params"], '[["a", "b\'"]]')
243+
224244
def test_binary_param_force_text(self):
225245
self.assertEqual(len(self.panel._queries), 0)
226246

0 commit comments

Comments
 (0)