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:
parent
f57bc92842
commit
1653ffb571
1
TODO.TXT
1
TODO.TXT
@ -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``
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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])
|
||||
|
Loading…
x
Reference in New Issue
Block a user