-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Add search by room ID and room alias to List Room admin API #11099
Changes from 4 commits
481cb3c
3970b7c
f1e92e6
2ab73a0
2451fc4
831e2ce
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| Add search by room ID and room alias to List Room admin API. |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -409,22 +409,33 @@ async def get_rooms_paginate( | |||||||||||||||||||
| limit: maximum amount of rooms to retrieve | ||||||||||||||||||||
| order_by: the sort order of the returned list | ||||||||||||||||||||
| reverse_order: whether to reverse the room list | ||||||||||||||||||||
| search_term: a string to filter room names by | ||||||||||||||||||||
| search_term: a string to filter room names, | ||||||||||||||||||||
| canonical alias and room ids by | ||||||||||||||||||||
| room ids should only match case sensitive and the complete ID | ||||||||||||||||||||
dklimpel marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||||||||||||||
| Returns: | ||||||||||||||||||||
| A list of room dicts and an integer representing the total number of | ||||||||||||||||||||
| rooms that exist given this query | ||||||||||||||||||||
| """ | ||||||||||||||||||||
| # Filter room names by a string | ||||||||||||||||||||
| where_statement = "" | ||||||||||||||||||||
| search_pattern = [] | ||||||||||||||||||||
| if search_term: | ||||||||||||||||||||
| where_statement = "WHERE LOWER(state.name) LIKE ?" | ||||||||||||||||||||
| where_statement = """ | ||||||||||||||||||||
| WHERE LOWER(state.name) LIKE ? | ||||||||||||||||||||
| OR LOWER(state.canonical_alias) LIKE ? | ||||||||||||||||||||
| OR state.room_id = ? | ||||||||||||||||||||
| """ | ||||||||||||||||||||
|
|
||||||||||||||||||||
| # Our postgres db driver converts ? -> %s in SQL strings as that's the | ||||||||||||||||||||
| # placeholder for postgres. | ||||||||||||||||||||
| # HOWEVER, if you put a % into your SQL then everything goes wibbly. | ||||||||||||||||||||
| # To get around this, we're going to surround search_term with %'s | ||||||||||||||||||||
| # before giving it to the database in python instead | ||||||||||||||||||||
| search_term = "%" + search_term.lower() + "%" | ||||||||||||||||||||
| search_pattern = [ | ||||||||||||||||||||
| "%" + search_term.lower() + "%", | ||||||||||||||||||||
| "#%" + search_term.lower() + "%:%", | ||||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this feels a bit redundant. All canonical aliases should start with # and contain a domain part, so why not just:
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The reason/idea is to search only in local part and not in server part. synapse/synapse/storage/databases/main/__init__.py Lines 289 to 295 in 66bdca3
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I guess I'm not entirely sure we should only search the local part here, but ok. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I can change it, if you like. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. fair point! |
||||||||||||||||||||
| search_term, | ||||||||||||||||||||
| ] | ||||||||||||||||||||
|
|
||||||||||||||||||||
| # Set ordering | ||||||||||||||||||||
| if RoomSortOrder(order_by) == RoomSortOrder.SIZE: | ||||||||||||||||||||
|
|
@@ -517,10 +528,10 @@ async def get_rooms_paginate( | |||||||||||||||||||
|
|
||||||||||||||||||||
| def _get_rooms_paginate_txn(txn): | ||||||||||||||||||||
| # Execute the data query | ||||||||||||||||||||
| sql_values = (limit, start) | ||||||||||||||||||||
| if search_term: | ||||||||||||||||||||
| sql_values = [limit, start] | ||||||||||||||||||||
| if search_pattern: | ||||||||||||||||||||
| # Add the search term into the WHERE clause | ||||||||||||||||||||
| sql_values = (search_term,) + sql_values | ||||||||||||||||||||
| sql_values = search_pattern + sql_values | ||||||||||||||||||||
| txn.execute(info_sql, sql_values) | ||||||||||||||||||||
|
||||||||||||||||||||
|
|
||||||||||||||||||||
| # Refactor room query data into a structured dictionary | ||||||||||||||||||||
|
|
@@ -548,7 +559,7 @@ def _get_rooms_paginate_txn(txn): | |||||||||||||||||||
| # Execute the count query | ||||||||||||||||||||
|
|
||||||||||||||||||||
| # Add the search term into the WHERE clause if present | ||||||||||||||||||||
| sql_values = (search_term,) if search_term else () | ||||||||||||||||||||
| sql_values = search_pattern if search_pattern else () | ||||||||||||||||||||
| txn.execute(count_sql, sql_values) | ||||||||||||||||||||
dklimpel marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||||||||||||||
|
|
||||||||||||||||||||
| room_count = txn.fetchone() | ||||||||||||||||||||
|
|
||||||||||||||||||||
Uh oh!
There was an error while loading. Please reload this page.