Fix imsync's SELECT query to only find the rooms I'm actually joined in, not every room I have ever joined

paul/schema_breaking_changes
Paul "LeoNerd" Evans 2014-08-15 15:44:53 +01:00
parent 5c88e57555
commit 3c532314ec
1 changed files with 5 additions and 2 deletions

View File

@ -111,9 +111,12 @@ class RoomMemberStore(SQLBaseStore):
for membership in membership_list:
args.append(membership)
# sub-select finds the row ID for the most recent (i.e. current)
# state change of this user per room, then the outer select finds those
query = ("SELECT room_id, membership FROM room_memberships"
+ " WHERE user_id=? AND " + where_membership
+ " GROUP BY room_id ORDER BY id DESC")
+ " WHERE id IN (SELECT MAX(id) FROM room_memberships"
+ " WHERE user_id=? GROUP BY room_id)"
+ " AND " + where_membership)
return self._execute(
self.cursor_to_dict, query, *args
)