Fix room summary when rejected events are in state

Annoyingly, `current_state_events` table can include rejected events,
in which case the membership column will be null. To work around this
lets just always filter out null membership for now.
This commit is contained in:
Erik Johnston 2019-07-26 10:07:21 +01:00
parent c159803067
commit 14c24c9037

View File

@ -156,9 +156,12 @@ class RoomMemberWorkerStore(EventsWorkerStore):
# then we can avoid a join, which is a Very Good Thing given how # then we can avoid a join, which is a Very Good Thing given how
# frequently this function gets called. # frequently this function gets called.
if self._current_state_events_membership_up_to_date: if self._current_state_events_membership_up_to_date:
# Note, rejected events will have a null membership field, so
# we we manually filter them out.
sql = """ sql = """
SELECT count(*), membership FROM current_state_events SELECT count(*), membership FROM current_state_events
WHERE type = 'm.room.member' AND room_id = ? WHERE type = 'm.room.member' AND room_id = ?
AND membership IS NOT NULL
GROUP BY membership GROUP BY membership
""" """
else: else:
@ -180,10 +183,13 @@ 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: if self._current_state_events_membership_up_to_date:
# Note, rejected events will have a null membership field, so
# we we manually filter them out.
sql = """ sql = """
SELECT state_key, membership, event_id SELECT state_key, membership, event_id
FROM current_state_events FROM current_state_events
WHERE type = 'm.room.member' AND room_id = ? WHERE type = 'm.room.member' AND room_id = ?
AND membership IS NOT NULL
ORDER BY ORDER BY
CASE membership WHEN ? THEN 1 WHEN ? THEN 2 ELSE 3 END ASC, CASE membership WHEN ? THEN 1 WHEN ? THEN 2 ELSE 3 END ASC,
event_id ASC event_id ASC