mirror of
https://github.com/element-hq/synapse
synced 2024-08-20 02:40:22 +00:00
Fix up get_current_state and get_room_name_and_aliases queries to parse events in transaction
This commit is contained in:
parent
69d4063651
commit
f383d5a801
2 changed files with 30 additions and 32 deletions
|
@ -188,26 +188,21 @@ class RoomStore(SQLBaseStore):
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_room_name_and_aliases(self, room_id):
|
def get_room_name_and_aliases(self, room_id):
|
||||||
del_sql = (
|
def f(txn):
|
||||||
"SELECT event_id FROM redactions WHERE redacts = e.event_id "
|
sql = (
|
||||||
"LIMIT 1"
|
"SELECT event_id FROM events current_state_events "
|
||||||
)
|
"WHERE room_id = ? "
|
||||||
|
)
|
||||||
|
|
||||||
sql = (
|
sql += " AND ((type = 'm.room.name' AND state_key = '')"
|
||||||
"SELECT e.*, (%(redacted)s) AS redacted FROM events as e "
|
sql += " OR type = 'm.room.aliases')"
|
||||||
"INNER JOIN current_state_events as c ON e.event_id = c.event_id "
|
|
||||||
"WHERE c.room_id = ? "
|
|
||||||
) % {
|
|
||||||
"redacted": del_sql,
|
|
||||||
}
|
|
||||||
|
|
||||||
sql += " AND ((c.type = 'm.room.name' AND c.state_key = '')"
|
txn.execute(sql, (room_id,))
|
||||||
sql += " OR c.type = 'm.room.aliases')"
|
results = self.cursor_to_dict(txn)
|
||||||
args = (room_id,)
|
|
||||||
|
|
||||||
results = yield self._execute_and_decode("get_current_state", sql, *args)
|
return self._parse_events_txn(txn, results)
|
||||||
|
|
||||||
events = yield self._parse_events(results)
|
events = yield self.runInteraction("get_room_name_and_aliases", f)
|
||||||
|
|
||||||
name = None
|
name = None
|
||||||
aliases = []
|
aliases = []
|
||||||
|
|
|
@ -128,25 +128,28 @@ class StateStore(SQLBaseStore):
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_current_state(self, room_id, event_type=None, state_key=""):
|
def get_current_state(self, room_id, event_type=None, state_key=""):
|
||||||
sql = (
|
def f(txn):
|
||||||
"SELECT e.*, r.event_id FROM events as e"
|
sql = (
|
||||||
" LEFT JOIN redactions as r ON r.redacts = e.event_id"
|
"SELECT e.event_id FROM events as e"
|
||||||
" INNER JOIN current_state_events as c ON e.event_id = c.event_id"
|
" INNER JOIN current_state_events as c ON e.event_id = c.event_id"
|
||||||
" WHERE c.room_id = ? "
|
" WHERE c.room_id = ? "
|
||||||
)
|
)
|
||||||
|
|
||||||
if event_type and state_key is not None:
|
if event_type and state_key is not None:
|
||||||
sql += " AND c.type = ? AND c.state_key = ? "
|
sql += " AND c.type = ? AND c.state_key = ? "
|
||||||
args = (room_id, event_type, state_key)
|
args = (room_id, event_type, state_key)
|
||||||
elif event_type:
|
elif event_type:
|
||||||
sql += " AND c.type = ?"
|
sql += " AND c.type = ?"
|
||||||
args = (room_id, event_type)
|
args = (room_id, event_type)
|
||||||
else:
|
else:
|
||||||
args = (room_id, )
|
args = (room_id, )
|
||||||
|
|
||||||
results = yield self._execute_and_decode("get_current_state", sql, *args)
|
txn.execute(sql, args)
|
||||||
|
results = self.cursor_to_dict(txn)
|
||||||
|
|
||||||
events = yield self._parse_events(results)
|
return self._parse_events_txn(results)
|
||||||
|
|
||||||
|
events = self.runInteraction("get_current_state", f)
|
||||||
defer.returnValue(events)
|
defer.returnValue(events)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue