Handle the server leaving a public room
2 files changed, 15 insertions, 0 deletions
diff --git a/synapse/storage/schema/delta/42/user_dir.py b/synapse/storage/schema/delta/42/user_dir.py
index 57b89ba552..95a7a79fd3 100644
--- a/synapse/storage/schema/delta/42/user_dir.py
+++ b/synapse/storage/schema/delta/42/user_dir.py
@@ -41,6 +41,7 @@ CREATE TABLE user_directory (
);
CREATE INDEX user_directory_fts_idx ON user_directory USING gin(vector);
+CREATE INDEX user_directory_room_idx ON user_directory(room_id);
CREATE INDEX user_directory_user_idx ON user_directory(user_id);
"""
@@ -48,6 +49,9 @@ CREATE INDEX user_directory_user_idx ON user_directory(user_id);
SQLITE_TABLE = """
CREATE VIRTUAL TABLE user_directory
USING fts4 ( user_id, room_id, display_name, avatar_url, value );
+
+CREATE INDEX user_directory_room_idx ON user_directory(room_id);
+CREATE INDEX user_directory_user_idx ON user_directory(user_id);
"""
diff --git a/synapse/storage/user_directory.py b/synapse/storage/user_directory.py
index 83812bf092..0df979cb01 100644
--- a/synapse/storage/user_directory.py
+++ b/synapse/storage/user_directory.py
@@ -124,6 +124,17 @@ class UserDirectoryStore(SQLBaseStore):
)
self.get_user_in_directory.invalidate((user_id,))
+ def get_users_in_dir_due_to_room(self, room_id):
+ """Get all user_ids that are in the room directory becuase they're
+ in the given room_id
+ """
+ return self._simple_select_onecol(
+ table="user_directory",
+ keyvalues={"room_id": room_id},
+ retcol="user_id",
+ desc="get_users_in_dir_due_to_room",
+ )
+
def get_all_rooms(self):
"""Get all room_ids we've ever known about
"""
|