mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2025-01-06 07:37:52 -05:00
Use the current_state_events.membership column
This commit is contained in:
parent
059d8c1a4e
commit
8e1ada9e6f
@ -115,14 +115,23 @@ class RoomMemberWorkerStore(EventsWorkerStore):
|
|||||||
@cached(max_entries=100000, iterable=True)
|
@cached(max_entries=100000, iterable=True)
|
||||||
def get_users_in_room(self, room_id):
|
def get_users_in_room(self, room_id):
|
||||||
def f(txn):
|
def f(txn):
|
||||||
sql = (
|
# If we can assume current_state_events.membership is up to date
|
||||||
"SELECT m.user_id FROM room_memberships as m"
|
# then we can avoid a join, which is a Very Good Thing given how
|
||||||
" INNER JOIN current_state_events as c"
|
# frequently this function gets called.
|
||||||
" ON m.event_id = c.event_id "
|
if self._current_state_events_membership_up_to_date:
|
||||||
" AND m.room_id = c.room_id "
|
sql = """
|
||||||
" AND m.user_id = c.state_key"
|
SELECT state_key FROM current_state_events
|
||||||
" WHERE c.type = 'm.room.member' AND c.room_id = ? AND m.membership = ?"
|
WHERE type = 'm.room.member' AND room_id = ? AND membership = ?
|
||||||
)
|
"""
|
||||||
|
else:
|
||||||
|
sql = """
|
||||||
|
SELECT state_key FROM room_memberships as m
|
||||||
|
INNER JOIN current_state_events as c
|
||||||
|
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 = ? AND m.membership = ?
|
||||||
|
"""
|
||||||
|
|
||||||
txn.execute(sql, (room_id, Membership.JOIN))
|
txn.execute(sql, (room_id, Membership.JOIN))
|
||||||
return [to_ascii(r[0]) for r in txn]
|
return [to_ascii(r[0]) for r in txn]
|
||||||
@ -144,15 +153,26 @@ class RoomMemberWorkerStore(EventsWorkerStore):
|
|||||||
# first get counts.
|
# first get counts.
|
||||||
# We do this all in one transaction to keep the cache small.
|
# We do this all in one transaction to keep the cache small.
|
||||||
# FIXME: get rid of this when we have room_stats
|
# FIXME: get rid of this when we have room_stats
|
||||||
sql = """
|
|
||||||
SELECT count(*), m.membership FROM room_memberships as m
|
# If we can assume current_state_events.membership is up to date
|
||||||
INNER JOIN current_state_events as c
|
# then we can avoid a join, which is a Very Good Thing given how
|
||||||
ON m.event_id = c.event_id
|
# frequently this function gets called.
|
||||||
AND m.room_id = c.room_id
|
if self._current_state_events_membership_up_to_date:
|
||||||
AND m.user_id = c.state_key
|
sql = """
|
||||||
WHERE c.type = 'm.room.member' AND c.room_id = ?
|
SELECT count(*), membership FROM current_state_events
|
||||||
GROUP BY m.membership
|
WHERE type = 'm.room.member' AND room_id = ?
|
||||||
"""
|
GROUP BY membership
|
||||||
|
"""
|
||||||
|
else:
|
||||||
|
sql = """
|
||||||
|
SELECT count(*), m.membership FROM room_memberships as m
|
||||||
|
INNER JOIN current_state_events as c
|
||||||
|
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 = ?
|
||||||
|
GROUP BY m.membership
|
||||||
|
"""
|
||||||
|
|
||||||
txn.execute(sql, (room_id,))
|
txn.execute(sql, (room_id,))
|
||||||
res = {}
|
res = {}
|
||||||
|
Loading…
Reference in New Issue
Block a user