summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoulder Sprinters <boulder-sprinters@djangoproject.com>2006-11-16 21:30:37 +0000
committerBoulder Sprinters <boulder-sprinters@djangoproject.com>2006-11-16 21:30:37 +0000
commite146dd75d94a944009d4a1639906b7ae424be448 (patch)
tree629be53a486e1ea8622b66c0c44291ffd70bc4fe
parentfb3a93975fe07c6589fa371971b873ab268689ef (diff)
boulder-oracle-sprint: Worked around cx_Oracle returning
datetime.datetime objects for DATE cols when Django wants a datetime.date. git-svn-id: http://code.djangoproject.com/svn/django/branches/boulder-oracle-sprint@4081 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/backends/oracle/query.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/django/db/backends/oracle/query.py b/django/db/backends/oracle/query.py
index 60d9aaca6d..46f303f8db 100644
--- a/django/db/backends/oracle/query.py
+++ b/django/db/backends/oracle/query.py
@@ -1,3 +1,4 @@
+import datetime
from django.db import backend, connection
# TODO: Why the frack can't I just import get_cached_row?
#from django.db.models.query import get_cached_row
@@ -70,15 +71,23 @@ def get_query_set_class(DefaultQuerySet):
# 1. retrieve each row in turn
# 2. convert NCLOBs
- def resolve_lobs(row):
+ def resolve_cols(row):
for field in row:
if isinstance(field, Database.LOB):
yield str(field)
+ # cx_Oracle returns datetime.datetime objects for DATE
+ # columns, but Django wants a datetime.date.
+ # A workaround is to return a date if time fields are 0.
+ # A safer fix would involve either patching cx_Oracle,
+ # or checking the Model here, neither of which is good.
+ elif isinstance(field, datetime.datetime) and \
+ field.hour == field.minute == field.second == field.microsecond == 0:
+ yield field.date()
else:
yield field
for unresolved_row in cursor:
- row = list(resolve_lobs(unresolved_row))
+ row = list(resolve_cols(unresolved_row))
if fill_cache:
obj, index_end = get_cached_row(self.model, row, 0)
else: