Author: mtredinnick
Date: 2008-02-23 02:36:41 -0600 (Sat, 23 Feb 2008)
New Revision: 7150

Modified:
   django/trunk/django/db/models/fields/__init__.py
   django/trunk/tests/regressiontests/datatypes/models.py
Log:
Fixed #3689, #5223 -- Fixed "1st of January" comparisons for SQLite without 
breaking the other backends.

Based on a patch from raminf and tests from Nebojsa Djordjevic.


Modified: django/trunk/django/db/models/fields/__init__.py
===================================================================
--- django/trunk/django/db/models/fields/__init__.py    2008-02-23 03:36:38 UTC 
(rev 7149)
+++ django/trunk/django/db/models/fields/__init__.py    2008-02-23 08:36:41 UTC 
(rev 7150)
@@ -228,7 +228,11 @@
                 value = int(value)
             except ValueError:
                 raise ValueError("The __year lookup type requires an integer 
argument")
-            return ['%s-01-01 00:00:00' % value, '%s-12-31 23:59:59.999999' % 
value]
+            if settings.DATABASE_ENGINE == 'sqlite3':
+                first = '%s-01-01'
+            else:
+                first = '%s-01-01 00:00:00'
+            return [first % value, '%s-12-31 23:59:59.999999' % value]
         raise TypeError("Field has invalid lookup: %s" % lookup_type)
 
     def has_default(self):

Modified: django/trunk/tests/regressiontests/datatypes/models.py
===================================================================
--- django/trunk/tests/regressiontests/datatypes/models.py      2008-02-23 
03:36:38 UTC (rev 7149)
+++ django/trunk/tests/regressiontests/datatypes/models.py      2008-02-23 
08:36:41 UTC (rev 7150)
@@ -56,4 +56,30 @@
 datetime.time(5, 30)
 >>> d3.consumed_at
 datetime.datetime(2007, 4, 20, 16, 19, 59)
+
+# Year boundary tests (ticket #3689)
+
+>>> d = Donut(name='Date Test 2007', baked_date=datetime.datetime(year=2007, 
month=12, day=31), consumed_at=datetime.datetime(year=2007, month=12, day=31, 
hour=23, minute=59, second=59))
+>>> d.save()
+>>> d1 = Donut(name='Date Test 2006', baked_date=datetime.datetime(year=2006, 
month=1, day=1), consumed_at=datetime.datetime(year=2006, month=1, day=1))
+>>> d1.save()
+
+>>> Donut.objects.filter(baked_date__year=2007)
+[<Donut: Date Test 2007>]
+
+>>> Donut.objects.filter(baked_date__year=2006)
+[<Donut: Date Test 2006>]
+
+>>> Donut.objects.filter(consumed_at__year=2007).order_by('name')
+[<Donut: Apple Fritter>, <Donut: Date Test 2007>]
+
+>>> Donut.objects.filter(consumed_at__year=2006)
+[<Donut: Date Test 2006>]
+
+>>> Donut.objects.filter(consumed_at__year=2005)
+[]
+
+>>> Donut.objects.filter(consumed_at__year=2008)
+[]
+
 """}


--~--~---------~--~----~------------~-------~--~----~
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