Author: mtredinnick
Date: 2008-11-16 02:55:10 -0600 (Sun, 16 Nov 2008)
New Revision: 9468

Modified:
   django/branches/releases/1.0.X/django/db/backends/sqlite3/base.py
   django/branches/releases/1.0.X/tests/regressiontests/model_regress/models.py
Log:
[1.0.X] Fixed #3501 -- Fixed date filtering in querysets for nullable date 
fields. Only affects SQLite.

Backport of r9466 from trunk.


Modified: django/branches/releases/1.0.X/django/db/backends/sqlite3/base.py
===================================================================
--- django/branches/releases/1.0.X/django/db/backends/sqlite3/base.py   
2008-11-16 08:50:06 UTC (rev 9467)
+++ django/branches/releases/1.0.X/django/db/backends/sqlite3/base.py   
2008-11-16 08:55:10 UTC (rev 9468)
@@ -101,7 +101,7 @@
         return [first % value, second % value]
 
 class DatabaseWrapper(BaseDatabaseWrapper):
-    
+
     # SQLite requires LIKE statements to include an ESCAPE clause if the value
     # being escaped has a percent or underscore in it.
     # See http://www.sqlite.org/lang_expr.html for an explanation.
@@ -124,7 +124,7 @@
 
     def __init__(self, *args, **kwargs):
         super(DatabaseWrapper, self).__init__(*args, **kwargs)
-        
+
         self.features = DatabaseFeatures()
         self.ops = DatabaseOperations()
         self.client = DatabaseClient()
@@ -179,6 +179,8 @@
         return query % tuple("?" * num_params)
 
 def _sqlite_extract(lookup_type, dt):
+    if dt is None:
+        return None
     try:
         dt = util.typecast_timestamp(dt)
     except (ValueError, TypeError):

Modified: 
django/branches/releases/1.0.X/tests/regressiontests/model_regress/models.py
===================================================================
--- 
django/branches/releases/1.0.X/tests/regressiontests/model_regress/models.py    
    2008-11-16 08:50:06 UTC (rev 9467)
+++ 
django/branches/releases/1.0.X/tests/regressiontests/model_regress/models.py    
    2008-11-16 08:55:10 UTC (rev 9468)
@@ -27,7 +27,7 @@
     name = models.CharField(max_length=60)
 
 class Party(models.Model):
-    when = models.DateField()
+    when = models.DateField(null=True)
 
 class Event(models.Model):
     when = models.DateTimeField()
@@ -93,6 +93,16 @@
 >>> [p.when for p in Party.objects.filter(when__year='1998')]
 [datetime.date(1998, 12, 31)]
 
+# Date filtering was failing with NULL date values in SQLite (regression test
+# for #3501, amongst other things).
+>>> _ = Party.objects.create()
+>>> p = Party.objects.filter(when__month=1)[0]
+>>> p.when
+datetime.date(1999, 1, 1)
+>>> l = Party.objects.filter(pk=p.pk).dates("when", "month")
+>>> l[0].month == 1
+True
+
 # Check that get_next_by_FIELD and get_previous_by_FIELD don't crash when we
 # have usecs values stored on the database
 #


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to