diff --git a/synapse/storage/room.py b/synapse/storage/room.py
index 78572bbdd2..2b1864a82f 100644
--- a/synapse/storage/room.py
+++ b/synapse/storage/room.py
@@ -188,26 +188,21 @@ class RoomStore(SQLBaseStore):
@defer.inlineCallbacks
def get_room_name_and_aliases(self, room_id):
- del_sql = (
- "SELECT event_id FROM redactions WHERE redacts = e.event_id "
- "LIMIT 1"
- )
+ def f(txn):
+ sql = (
+ "SELECT event_id FROM events current_state_events "
+ "WHERE room_id = ? "
+ )
- sql = (
- "SELECT e.*, (%(redacted)s) AS redacted FROM events as e "
- "INNER JOIN current_state_events as c ON e.event_id = c.event_id "
- "WHERE c.room_id = ? "
- ) % {
- "redacted": del_sql,
- }
+ sql += " AND ((type = 'm.room.name' AND state_key = '')"
+ sql += " OR type = 'm.room.aliases')"
- sql += " AND ((c.type = 'm.room.name' AND c.state_key = '')"
- sql += " OR c.type = 'm.room.aliases')"
- args = (room_id,)
+ txn.execute(sql, (room_id,))
+ results = self.cursor_to_dict(txn)
- 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
aliases = []
diff --git a/synapse/storage/state.py b/synapse/storage/state.py
index 95bc15c0dc..8b3ed244af 100644
--- a/synapse/storage/state.py
+++ b/synapse/storage/state.py
@@ -128,25 +128,28 @@ class StateStore(SQLBaseStore):
@defer.inlineCallbacks
def get_current_state(self, room_id, event_type=None, state_key=""):
- sql = (
- "SELECT e.*, r.event_id FROM events as e"
- " LEFT JOIN redactions as r ON r.redacts = e.event_id"
- " INNER JOIN current_state_events as c ON e.event_id = c.event_id"
- " WHERE c.room_id = ? "
- )
+ def f(txn):
+ sql = (
+ "SELECT e.event_id FROM events as e"
+ " INNER JOIN current_state_events as c ON e.event_id = c.event_id"
+ " WHERE c.room_id = ? "
+ )
+
+ if event_type and state_key is not None:
+ sql += " AND c.type = ? AND c.state_key = ? "
+ args = (room_id, event_type, state_key)
+ elif event_type:
+ sql += " AND c.type = ?"
+ args = (room_id, event_type)
+ else:
+ args = (room_id, )
- if event_type and state_key is not None:
- sql += " AND c.type = ? AND c.state_key = ? "
- args = (room_id, event_type, state_key)
- elif event_type:
- sql += " AND c.type = ?"
- args = (room_id, event_type)
- else:
- args = (room_id, )
+ txn.execute(sql, args)
+ results = self.cursor_to_dict(txn)
- results = yield self._execute_and_decode("get_current_state", sql, *args)
+ return self._parse_events_txn(results)
- events = yield self._parse_events(results)
+ events = self.runInteraction("get_current_state", f)
defer.returnValue(events)
|