sql: do not mix mailbox from the inbox and the outbox

This commit is contained in:
Benjamin Dauvergne 2014-01-31 16:08:11 +01:00
parent e989838624
commit 58140c6d61
2 changed files with 6 additions and 5 deletions

View File

@ -33,10 +33,10 @@ def get_unseen_documents_count(related_users, user):
user.pk,
))
def get_documents(qs, related_users, user):
def get_documents(qs, related_users, user, outbox):
qs = get_complex_join(qs,
GET_DOCUMENTS_SQL,
( tuple(related_users.values_list('id', flat=True)), ))
( outbox, tuple(related_users.values_list('id', flat=True)), ))
qs = qs.prefetch_related('to_list', 'to_user', 'mailboxes__owner')
qs = qs.extra(select={ 'seen': SEEN_DOCUMENT % user.pk })
return qs
@ -44,7 +44,7 @@ def get_documents(qs, related_users, user):
GET_UNSEEN_DOCUMENTS_SQL = '''SELECT d.id
FROM docbow_document AS d
INNER JOIN docbow_mailbox AS mb
ON mb.document_id = d.id and mb.owner_id IN %s
ON mb.outbox = FALSE AND mb.document_id = d.id AND mb.owner_id IN %s
LEFT JOIN docbow_seendocument as sd
ON sd.document_id = d.id AND sd.user_id = %s
WHERE sd.id IS NULL
@ -55,7 +55,7 @@ GET_UNSEEN_DOCUMENTS_SQL = '''SELECT d.id
GET_DOCUMENTS_SQL = '''SELECT d.id
FROM docbow_document AS d
INNER JOIN docbow_mailbox AS mb ON
mb.document_id = d.id and mb.owner_id IN %s
mb.outbox = %s AND mb.document_id = d.id AND mb.owner_id IN %s
GROUP BY d.id, d.date
ORDER BY d.date'''

View File

@ -529,7 +529,8 @@ class MailboxQuerysetMixin(object):
def get_queryset(self):
qs = super(MailboxQuerysetMixin, self).get_queryset()
if not hasattr(self, '_qs'):
self._qs = sql.get_documents(qs, get_related_users(self.request), self.request.user).distinct()
self._qs = sql.get_documents(qs, get_related_users(self.request),
self.request.user, self.outbox).distinct()
return self._qs
def get_context_data(self, **kwargs):