1
0
mirror of https://github.com/django/django.git synced 2025-10-26 15:16:09 +00:00

A bug from queryset-refactor days: although the Query class has "group_by" and

"having" attributes, only the former was included in the resulting SQL, meaning
subclasses had to completely duplicate Query.as_sql() if they were using any
kind of grouping filtering on the results.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@9007 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick
2008-09-11 02:00:27 +00:00
parent 11fd9f2d84
commit e47cc781d8
2 changed files with 36 additions and 0 deletions

View File

@@ -292,6 +292,11 @@ class Query(object):
grouping = self.get_grouping()
result.append('GROUP BY %s' % ', '.join(grouping))
if self.having:
having, h_params = self.get_having()
result.append('HAVING %s' % ', '.join(having))
params.extend(h_params)
if ordering:
result.append('ORDER BY %s' % ', '.join(ordering))
@@ -573,6 +578,24 @@ class Query(object):
result.append(str(col))
return result
def get_having(self):
"""
Returns a tuple representing the SQL elements in the "having" clause.
By default, the elements of self.having have their as_sql() method
called or are returned unchanged (if they don't have an as_sql()
method).
"""
result = []
params = []
for elt in self.having:
if hasattr(elt, 'as_sql'):
sql, params = elt.as_sql()
result.append(sql)
params.extend(params)
else:
result.append(elt)
return result, params
def get_ordering(self):
"""
Returns list representing the SQL elements in the "order by" clause.