Remove join when calculating room summaries.

This commit is contained in:
Erik Johnston 2019-07-24 11:49:15 +01:00
parent 62921fb53e
commit 0c4a99607e

View file

@ -179,17 +179,25 @@ class RoomMemberWorkerStore(EventsWorkerStore):
# we order by membership and then fairly arbitrarily by event_id so # we order by membership and then fairly arbitrarily by event_id so
# heroes are consistent # heroes are consistent
if self._current_state_events_membership_up_to_date:
sql = """ sql = """
SELECT m.user_id, m.membership, m.event_id SELECT state_key, membership, event_id
FROM current_state_events
WHERE type = 'm.room.member' AND room_id = ?
ORDER BY
CASE membership WHEN ? THEN 1 WHEN ? THEN 2 ELSE 3 END ASC,
event_id ASC
LIMIT ?
"""
else:
sql = """
SELECT c.state_key, m.membership, c.event_id
FROM room_memberships as m FROM room_memberships as m
INNER JOIN current_state_events as c INNER JOIN current_state_events as c USING (room_id, event_id)
ON m.event_id = c.event_id
AND m.room_id = c.room_id
AND m.user_id = c.state_key
WHERE c.type = 'm.room.member' AND c.room_id = ? WHERE c.type = 'm.room.member' AND c.room_id = ?
ORDER BY ORDER BY
CASE m.membership WHEN ? THEN 1 WHEN ? THEN 2 ELSE 3 END ASC, CASE m.membership WHEN ? THEN 1 WHEN ? THEN 2 ELSE 3 END ASC,
m.event_id ASC c.event_id ASC
LIMIT ? LIMIT ?
""" """