From 9e23c3c5d9d796540356906399365c651e07f084 Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Thu, 26 Jun 2008 11:42:12 +0000 Subject: [PATCH] EmptyQuerySet classes can now be merged with normal querysets. git-svn-id: http://code.djangoproject.com/svn/django/trunk@7765 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/query.py | 10 ++++++++++ tests/regressiontests/queries/models.py | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/django/db/models/query.py b/django/db/models/query.py index eff4c57a7c..fef71640b6 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -218,6 +218,8 @@ class QuerySet(object): def __and__(self, other): self._merge_sanity_check(other) + if isinstance(other, EmptyQuerySet): + return other._clone() combined = self._clone() combined.query.combine(other.query, sql.AND) return combined @@ -225,6 +227,8 @@ class QuerySet(object): def __or__(self, other): self._merge_sanity_check(other) combined = self._clone() + if isinstance(other, EmptyQuerySet): + return combined combined.query.combine(other.query, sql.OR) return combined @@ -705,6 +709,12 @@ class EmptyQuerySet(QuerySet): super(EmptyQuerySet, self).__init__(model, query) self._result_cache = [] + def __and__(self, other): + return self._clone() + + def __or__(self, other): + return other._clone() + def count(self): return 0 diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py index cfbaf773d6..c02ad73998 100644 --- a/tests/regressiontests/queries/models.py +++ b/tests/regressiontests/queries/models.py @@ -781,5 +781,15 @@ Bug #7107 -- this shouldn't create an infinite loop. >>> Valid.objects.all() [] +Empty querysets can be merged with others. +>>> Note.objects.none() | Note.objects.all() +[, , ] +>>> Note.objects.all() | Note.objects.none() +[, , ] +>>> Note.objects.none() & Note.objects.all() +[] +>>> Note.objects.all() & Note.objects.none() +[] + """}