|  | 
| 14 | 14 | # limitations under the License. | 
| 15 | 15 | 
 | 
| 16 | 16 | from collections import namedtuple | 
|  | 17 | +from typing import Optional | 
| 17 | 18 | 
 | 
| 18 | 19 | from twisted.internet import defer | 
| 19 | 20 | 
 | 
| @@ -159,10 +160,29 @@ def _delete_room_alias_txn(self, txn, room_alias): | 
| 159 | 160 | 
 | 
| 160 | 161 |         return room_id | 
| 161 | 162 | 
 | 
| 162 |  | -    def update_aliases_for_room(self, old_room_id, new_room_id, creator): | 
|  | 163 | +    def update_aliases_for_room( | 
|  | 164 | +        self, old_room_id: str, new_room_id: str, creator: Optional[str] = None, | 
|  | 165 | +    ): | 
|  | 166 | +        """Repoint all of the aliases for a given room, to a different room. | 
|  | 167 | +
 | 
|  | 168 | +        Args: | 
|  | 169 | +            old_room_id: | 
|  | 170 | +            new_room_id: | 
|  | 171 | +            creator: The user to record as the creator of the new mapping. | 
|  | 172 | +                If None, the creator will be left unchanged. | 
|  | 173 | +        """ | 
|  | 174 | + | 
| 163 | 175 |         def _update_aliases_for_room_txn(txn): | 
| 164 |  | -            sql = "UPDATE room_aliases SET room_id = ?, creator = ? WHERE room_id = ?" | 
| 165 |  | -            txn.execute(sql, (new_room_id, creator, old_room_id)) | 
|  | 176 | +            update_creator_sql = "" | 
|  | 177 | +            sql_params = (new_room_id, old_room_id) | 
|  | 178 | +            if creator: | 
|  | 179 | +                update_creator_sql = ", creator = ?" | 
|  | 180 | +                sql_params = (new_room_id, creator, old_room_id) | 
|  | 181 | + | 
|  | 182 | +            sql = "UPDATE room_aliases SET room_id = ? %s WHERE room_id = ?" % ( | 
|  | 183 | +                update_creator_sql, | 
|  | 184 | +            ) | 
|  | 185 | +            txn.execute(sql, sql_params) | 
| 166 | 186 |             self._invalidate_cache_and_stream( | 
| 167 | 187 |                 txn, self.get_aliases_for_room, (old_room_id,) | 
| 168 | 188 |             ) | 
|  | 
0 commit comments