Author: Alex
Date: 2010-06-22 13:08:38 -0500 (Tue, 22 Jun 2010)
New Revision: 13380

Modified:
   django/branches/soc2010/query-refactor/django/contrib/mongodb/compiler.py
   django/branches/soc2010/query-refactor/tests/regressiontests/mongodb/tests.py
Log:
[soc2010/query-refactor] Fixed __isnull.

Modified: 
django/branches/soc2010/query-refactor/django/contrib/mongodb/compiler.py
===================================================================
--- django/branches/soc2010/query-refactor/django/contrib/mongodb/compiler.py   
2010-06-22 02:58:45 UTC (rev 13379)
+++ django/branches/soc2010/query-refactor/django/contrib/mongodb/compiler.py   
2010-06-22 18:08:38 UTC (rev 13380)
@@ -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 @@
         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):

Modified: 
django/branches/soc2010/query-refactor/tests/regressiontests/mongodb/tests.py
===================================================================
--- 
django/branches/soc2010/query-refactor/tests/regressiontests/mongodb/tests.py   
    2010-06-22 02:58:45 UTC (rev 13379)
+++ 
django/branches/soc2010/query-refactor/tests/regressiontests/mongodb/tests.py   
    2010-06-22 18:08:38 UTC (rev 13380)
@@ -189,3 +189,38 @@
             ],
             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
+        )

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-upda...@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to