summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-11-16 08:55:10 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-11-16 08:55:10 +0000
commitd7e18567762fd33f0be8686cc948e9ea5e900d86 (patch)
treeaac9822907205c5faed5cce703cb91ba7d42b29f
parent197892ab6c0f835982eb4b5a907d5165b957d4a8 (diff)
[1.0.X] Fixed #3501 -- Fixed date filtering in querysets for nullable date fields. Only affects SQLite.
Backport of r9466 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9468 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/backends/sqlite3/base.py6
-rw-r--r--tests/regressiontests/model_regress/models.py12
2 files changed, 15 insertions, 3 deletions
diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py
index f175bc4cb7..745f9982a0 100644
--- a/django/db/backends/sqlite3/base.py
+++ b/django/db/backends/sqlite3/base.py
@@ -101,7 +101,7 @@ class DatabaseOperations(BaseDatabaseOperations):
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 @@ class DatabaseWrapper(BaseDatabaseWrapper):
def __init__(self, *args, **kwargs):
super(DatabaseWrapper, self).__init__(*args, **kwargs)
-
+
self.features = DatabaseFeatures()
self.ops = DatabaseOperations()
self.client = DatabaseClient()
@@ -179,6 +179,8 @@ class SQLiteCursorWrapper(Database.Cursor):
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):
diff --git a/tests/regressiontests/model_regress/models.py b/tests/regressiontests/model_regress/models.py
index 2f2c2facd5..19d38b216c 100644
--- a/tests/regressiontests/model_regress/models.py
+++ b/tests/regressiontests/model_regress/models.py
@@ -27,7 +27,7 @@ class Movie(models.Model):
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 @@ u''
>>> [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
#