Commit 9e23c3c5 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

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
parent 0e692fda
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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

+10 −0
Original line number Diff line number Diff line
@@ -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: n1>, <Note: n2>, <Note: n3>]
>>> Note.objects.all() | Note.objects.none()
[<Note: n1>, <Note: n2>, <Note: n3>]
>>> Note.objects.none() & Note.objects.all()
[]
>>> Note.objects.all() & Note.objects.none()
[]

"""}