summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2013-10-05 21:40:36 +0300
committerAnssi Kääriäinen <akaariai@gmail.com>2013-10-05 21:40:36 +0300
commit93cc6dcdac6fc3e506640fa38dd1798c3cd61cff (patch)
treef5536e5f4a6fe38213cb6e15d4762e6226b14d92
parent068b1e045f9b022495f662c80dd820aced116aec (diff)
Fixed #18414 -- qs.exists() for sliced distinct queries
-rw-r--r--django/db/models/sql/query.py3
-rw-r--r--tests/queries/tests.py19
2 files changed, 21 insertions, 1 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index ffd5af6c15..9e54b97374 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -431,7 +431,8 @@ class Query(object):
def has_results(self, using):
q = self.clone()
- q.clear_select_clause()
+ if not q.distinct:
+ q.clear_select_clause()
q.clear_ordering(True)
q.set_limits(high=1)
compiler = q.get_compiler(using=using)
diff --git a/tests/queries/tests.py b/tests/queries/tests.py
index 4739e21540..6930f3093d 100644
--- a/tests/queries/tests.py
+++ b/tests/queries/tests.py
@@ -1856,6 +1856,25 @@ class ExistsSql(TestCase):
id, name = connection.ops.quote_name('id'), connection.ops.quote_name('name')
self.assertTrue(id not in qstr and name not in qstr)
+ def test_ticket_18414(self):
+ Article.objects.create(name='one', created=datetime.datetime.now())
+ Article.objects.create(name='one', created=datetime.datetime.now())
+ Article.objects.create(name='two', created=datetime.datetime.now())
+ self.assertTrue(Article.objects.exists())
+ self.assertTrue(Article.objects.distinct().exists())
+ self.assertTrue(Article.objects.distinct()[1:3].exists())
+ self.assertFalse(Article.objects.distinct()[1:1].exists())
+
+ @unittest.skipUnless(connection.features.can_distinct_on_fields,
+ 'Uses distinct(fields)')
+ def test_ticket_18414_distinct_on(self):
+ Article.objects.create(name='one', created=datetime.datetime.now())
+ Article.objects.create(name='one', created=datetime.datetime.now())
+ Article.objects.create(name='two', created=datetime.datetime.now())
+ self.assertTrue(Article.objects.distinct('name').exists())
+ self.assertTrue(Article.objects.distinct('name')[1:2].exists())
+ self.assertFalse(Article.objects.distinct('name')[2:3].exists())
+
class QuerysetOrderedTests(unittest.TestCase):
"""