Permalink
Browse files

[soc2010/query-refactor] Fixed __isnull.

  • Loading branch information...
1 parent 1fda238 commit 530434f7ba6149c3073263548c42c3afe4a3de54 @alex alex committed Jun 22, 2010
Showing with 39 additions and 4 deletions.
  1. +4 −4 django/contrib/mongodb/compiler.py
  2. +35 −0 tests/regressiontests/mongodb/tests.py
@@ -6,9 +6,9 @@
# TODO: ...
class SQLCompiler(object):
LOOKUP_TYPES = {
- "exact": lambda params: params[0],
- "lt": lambda params: {"$lt": params[0]},
- "isnull": lambda params: params[0]
+ "exact": lambda params, value_annotation, negated: params[0],
+ "lt": lambda params, value_annotation, negated: {"$lt": params[0]},
+ "isnull": lambda params, value_annotation, negated: {"$ne": None} if value_annotation == negated else None,
}
def __init__(self, query, connection, using):
@@ -49,7 +49,7 @@ def make_atom(self, lhs, lookup_type, value_annotation, params_or_value, negated
if column == self.query.model._meta.pk.column:
column = "_id"
- return column, self.LOOKUP_TYPES[lookup_type](params)
+ return column, self.LOOKUP_TYPES[lookup_type](params, value_annotation, negated)
def negate(self, k, v):
if isinstance(v, dict):
@@ -189,3 +189,38 @@ def test_less_than(self):
],
lambda g: g.name,
)
+
+ def test_isnull(self):
+ q = Group.objects.create(name="Queen", year_formed=1971)
+ e = Group.objects.create(name="The E Street Band", year_formed=1972)
+ b = Group.objects.create(name="The Beatles")
+
+ self.assertQuerysetEqual(
+ Group.objects.filter(year_formed__isnull=True), [
+ "The Beatles",
+ ],
+ lambda g: g.name,
+ )
+
+ self.assertQuerysetEqual(
+ Group.objects.filter(year_formed__isnull=False), [
+ "Queen",
+ "The E Street Band",
+ ],
+ lambda g: g.name
+ )
+
+ self.assertQuerysetEqual(
+ Group.objects.exclude(year_formed__isnull=True), [
+ "Queen",
+ "The E Street Band",
+ ],
+ lambda g: g.name
+ )
+
+ self.assertQuerysetEqual(
+ Group.objects.exclude(year_formed__isnull=False), [
+ "The Beatles",
+ ],
+ lambda g: g.name
+ )

0 comments on commit 530434f

Please sign in to comment.