Kaydet (Commit) 9e23c3c5 authored tarafından Malcolm Tredinnick's avatar Malcolm Tredinnick

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
üst 0e692fda
...@@ -218,6 +218,8 @@ class QuerySet(object): ...@@ -218,6 +218,8 @@ class QuerySet(object):
def __and__(self, other): def __and__(self, other):
self._merge_sanity_check(other) self._merge_sanity_check(other)
if isinstance(other, EmptyQuerySet):
return other._clone()
combined = self._clone() combined = self._clone()
combined.query.combine(other.query, sql.AND) combined.query.combine(other.query, sql.AND)
return combined return combined
...@@ -225,6 +227,8 @@ class QuerySet(object): ...@@ -225,6 +227,8 @@ class QuerySet(object):
def __or__(self, other): def __or__(self, other):
self._merge_sanity_check(other) self._merge_sanity_check(other)
combined = self._clone() combined = self._clone()
if isinstance(other, EmptyQuerySet):
return combined
combined.query.combine(other.query, sql.OR) combined.query.combine(other.query, sql.OR)
return combined return combined
...@@ -705,6 +709,12 @@ class EmptyQuerySet(QuerySet): ...@@ -705,6 +709,12 @@ class EmptyQuerySet(QuerySet):
super(EmptyQuerySet, self).__init__(model, query) super(EmptyQuerySet, self).__init__(model, query)
self._result_cache = [] self._result_cache = []
def __and__(self, other):
return self._clone()
def __or__(self, other):
return other._clone()
def count(self): def count(self):
return 0 return 0
......
...@@ -781,5 +781,15 @@ Bug #7107 -- this shouldn't create an infinite loop. ...@@ -781,5 +781,15 @@ Bug #7107 -- this shouldn't create an infinite loop.
>>> Valid.objects.all() >>> 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()
[]
"""} """}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment