summaryrefslogtreecommitdiff
path: root/django/db/backends/postgresql/operations.py
diff options
context:
space:
mode:
authorTom <tom@tomforb.es>2017-09-10 15:34:18 +0100
committerTim Graham <timograham@gmail.com>2018-04-19 10:52:19 -0400
commitc1c163b42717ed5e051098ebf0e2f5c77810f20e (patch)
treeb3c42bcf178fe8f33394f41252a92238cb8baff3 /django/db/backends/postgresql/operations.py
parentdf90e462d91d3a77aa89b69d791bf17c2bf7ff9b (diff)
Fixed #28574 -- Added QuerySet.explain().
Diffstat (limited to 'django/db/backends/postgresql/operations.py')
-rw-r--r--django/db/backends/postgresql/operations.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/django/db/backends/postgresql/operations.py b/django/db/backends/postgresql/operations.py
index 6f48cfa228..80a28bce46 100644
--- a/django/db/backends/postgresql/operations.py
+++ b/django/db/backends/postgresql/operations.py
@@ -7,6 +7,7 @@ from django.db.backends.base.operations import BaseDatabaseOperations
class DatabaseOperations(BaseDatabaseOperations):
cast_char_field_without_max_length = 'varchar'
+ explain_prefix = 'EXPLAIN'
def unification_cast_sql(self, output_field):
internal_type = output_field.get_internal_type()
@@ -258,3 +259,17 @@ class DatabaseOperations(BaseDatabaseOperations):
'and FOLLOWING.'
)
return start_, end_
+
+ def explain_query_prefix(self, format=None, **options):
+ prefix = super().explain_query_prefix(format)
+ extra = {}
+ if format:
+ extra['FORMAT'] = format
+ if options:
+ extra.update({
+ name.upper(): 'true' if value else 'false'
+ for name, value in options.items()
+ })
+ if extra:
+ prefix += ' (%s)' % ', '.join('%s %s' % i for i in extra.items())
+ return prefix