1
0
mirror of https://github.com/django/django.git synced 2025-07-05 02:09:13 +00:00

[soc2009/multidb] Updated DateQuery to work correctly with multiple databases

git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/multidb@10943 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Alex Gaynor 2009-06-07 23:56:42 +00:00
parent f57bc92842
commit 1653ffb571
5 changed files with 17 additions and 12 deletions

View File

@ -48,7 +48,6 @@ that need to be done. I'm trying to be as granular as possible.
phase. This involves changing the following methods:
* ``Query.add_aggregate``
* ``DateQuery.add_date_select``
* ``Field.get_db_prep_lookup``
* ``DateField.get_db_prep_value``
* ``DateTimeField.get_db_prep_value``

View File

@ -29,22 +29,20 @@ class Date(object):
"""
Add a date selection column.
"""
def __init__(self, col, lookup_type, date_sql_func):
as_sql_takes_connection = True
def __init__(self, col, lookup_type):
self.col = col
self.lookup_type = lookup_type
self.date_sql_func = date_sql_func
def relabel_aliases(self, change_map):
c = self.col
if isinstance(c, (list, tuple)):
self.col = (change_map.get(c[0], c[0]), c[1])
def as_sql(self, quote_func=None):
if not quote_func:
quote_func = lambda x: x
def as_sql(self, qn, connection):
if isinstance(self.col, (list, tuple)):
col = '%s.%s' % tuple([quote_func(c) for c in self.col])
col = '%s.%s' % tuple([qn(c) for c in self.col])
else:
col = self.col
return self.date_sql_func(self.lookup_type, col)
return connection.ops.date_trunc_sql(self.lookup_type, col)

View File

@ -729,7 +729,10 @@ class BaseQuery(object):
aliases.add(r)
col_aliases.add(col[1])
else:
result.append(col.as_sql(quote_func=qn))
if getattr(col, 'as_sql_takes_connection', False):
result.append(col.as_sql(qn, self.connection))
else:
result.append(col.as_sql(qn))
if hasattr(col, 'alias'):
aliases.add(col.alias)

View File

@ -408,8 +408,7 @@ class DateQuery(Query):
result = self.setup_joins([field.name], self.get_meta(),
self.get_initial_alias(), False)
alias = result[3][-1]
select = Date((alias, field.column), lookup_type,
self.connection.ops.date_trunc_sql)
select = Date((alias, field.column), lookup_type)
self.select = [select]
self.select_fields = [None]
self.select_related = False # See #7097.

View File

@ -56,3 +56,9 @@ class QueryTestCase(TestCase):
pro = Book.objects.using(db).get(published__year=2008)
self.assertEqual(pro.title, "Pro Django")
self.assertEqual(pro.published, datetime.date(2008, 12, 16))
years = Book.objects.using(db).dates('published', 'year')
self.assertEqual([o.year for o in years], [2008, 2009])
months = Book.objects.dates('published', 'month').using(db)
self.assertEqual(sorted(o.month for o in months), [5, 12])