summaryrefslogtreecommitdiff
path: root/src/mailman
diff options
context:
space:
mode:
authorAurélien Bompard2015-11-20 07:56:42 +0100
committerBarry Warsaw2015-11-22 22:06:00 -0500
commit8413ae86bfce8665fc94a8e3fb8b5e0624a46f25 (patch)
tree58bd5a74fab7b5c2c37e66a9c4b57fe8a96bcc77 /src/mailman
parent8040aeab55f2f2def7129893756e7a97b0745542 (diff)
downloadmailman-8413ae86bfce8665fc94a8e3fb8b5e0624a46f25.tar.gz
mailman-8413ae86bfce8665fc94a8e3fb8b5e0624a46f25.tar.zst
mailman-8413ae86bfce8665fc94a8e3fb8b5e0624a46f25.zip
Optimize the roster SQL query
Measured improvement: about 100x faster. (!) Reformatting.
Diffstat (limited to 'src/mailman')
-rw-r--r--src/mailman/model/roster.py8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/mailman/model/roster.py b/src/mailman/model/roster.py
index da2ed4582..16f463199 100644
--- a/src/mailman/model/roster.py
+++ b/src/mailman/model/roster.py
@@ -286,9 +286,11 @@ class Memberships:
@dbconnection
def _query(self, store):
results = store.query(Member).filter(
- or_(Member.user_id == self._user.id,
- and_(Address.user_id == self._user.id,
- Member.address_id == Address.id)))
+ Member.user_id == self._user.id
+ ).union(
+ store.query(Member).join(Address).filter(
+ Address.user_id == self._user.id)
+ )
return results.distinct()
@property