From 9f6a82fafbd84865a06e162c14b6a5d5e110babe Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 20 Mar 2010 10:37:57 +0000 Subject: [PATCH] Fixed #13156 -- Ensure that exists() queries are as fast as they can be. Thanks to Jerome Leclanche for the report. git-svn-id: http://code.djangoproject.com/svn/django/trunk@12810 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/sql/query.py | 7 +++++-- tests/regressiontests/queries/models.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 9a19a9ea95..ffc9d3b13f 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -377,10 +377,13 @@ class Query(object): def has_results(self, using): q = self.clone() q.add_extra({'a': 1}, None, None, None, None, None) - q.add_fields(()) + q.select = [] + q.select_fields = [] + q.default_cols = False + q.select_related = False q.set_extra_mask(('a',)) q.set_aggregate_mask(()) - q.clear_ordering() + q.clear_ordering(True) q.set_limits(high=1) compiler = q.get_compiler(using=using) return bool(compiler.execute_sql(SINGLE)) diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py index 43c843756c..06c4524d9d 100644 --- a/tests/regressiontests/queries/models.py +++ b/tests/regressiontests/queries/models.py @@ -277,6 +277,16 @@ class Plaything(models.Model): __test__ = {'API_TESTS':""" +>>> # Regression for #13156 -- exists() queries have minimal SQL +>>> from django.db import connection +>>> settings.DEBUG = True +>>> Tag.objects.exists() +False +>>> # Ok - so the exist query worked - but did it include too many columns? +>>> "id" not in connection.queries[-1]['sql'] and "name" not in connection.queries[-1]['sql'] +True +>>> settings.DEBUG = False + >>> generic = NamedCategory.objects.create(name="Generic") >>> t1 = Tag.objects.create(name='t1', category=generic) >>> t2 = Tag.objects.create(name='t2', parent=t1, category=generic)