1
0
mirror of https://github.com/django/django.git synced 2024-12-22 17:16:24 +00:00

Refs #32226 -- Fixed JSON format of QuerySet.explain() on PostgreSQL when format is uppercased.

Follow up to aba9c2de66.
This commit is contained in:
Mariusz Felisiak 2022-04-19 08:24:24 +02:00 committed by GitHub
parent 903702dfb1
commit f4f2afeb45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 5 deletions

View File

@ -1434,9 +1434,8 @@ class SQLCompiler:
result = list(self.execute_sql())
# Some backends return 1 item tuples with strings, and others return
# tuples with integers and strings. Flatten them out into strings.
output_formatter = (
json.dumps if self.query.explain_info.format == "json" else str
)
format_ = self.query.explain_info.format
output_formatter = json.dumps if format_ and format_.lower() == "json" else str
for row in result[0]:
if not isinstance(row, str):
yield " ".join(output_formatter(c) for c in row)

View File

@ -41,14 +41,16 @@ class ExplainTests(TestCase):
)
self.assertIsInstance(result, str)
self.assertTrue(result)
if format == "xml":
if not format:
continue
if format.lower() == "xml":
try:
xml.etree.ElementTree.fromstring(result)
except xml.etree.ElementTree.ParseError as e:
self.fail(
f"QuerySet.explain() result is not valid XML: {e}"
)
elif format == "json":
elif format.lower() == "json":
try:
json.loads(result)
except json.JSONDecodeError as e: