diff options
author | Erik Johnston <erik@matrix.org> | 2015-03-20 13:52:56 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-03-20 14:11:38 +0000 |
commit | 87db64b83962873a3cf2af951e4c4bc2e4d50d76 (patch) | |
tree | 326af613b0f40a1c5ad6898bbafb517c18d7ba5c /synapse/storage/state.py | |
parent | Merge pull request #112 from matrix-org/hotfixes-v0.8.1-r2 (diff) | |
download | synapse-87db64b83962873a3cf2af951e4c4bc2e4d50d76.tar.xz |
Rearrange storage modules
Diffstat (limited to 'synapse/storage/state.py')
-rw-r--r-- | synapse/storage/state.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/synapse/storage/state.py b/synapse/storage/state.py index 456e4bd45d..58dbf2802b 100644 --- a/synapse/storage/state.py +++ b/synapse/storage/state.py @@ -15,6 +15,8 @@ from ._base import SQLBaseStore +from twisted.internet import defer + import logging logger = logging.getLogger(__name__) @@ -122,3 +124,33 @@ class StateStore(SQLBaseStore): }, or_replace=True, ) + + @defer.inlineCallbacks + def get_current_state(self, room_id, event_type=None, state_key=""): + del_sql = ( + "SELECT event_id FROM redactions WHERE redacts = e.event_id " + "LIMIT 1" + ) + + 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 " + "INNER JOIN state_events as s ON e.event_id = s.event_id " + "WHERE c.room_id = ? " + ) % { + "redacted": del_sql, + } + + if event_type and state_key is not None: + sql += " AND s.type = ? AND s.state_key = ? " + args = (room_id, event_type, state_key) + elif event_type: + sql += " AND s.type = ?" + args = (room_id, event_type) + else: + args = (room_id, ) + + results = yield self._execute_and_decode("get_current_state", sql, *args) + + events = yield self._parse_events(results) + defer.returnValue(events) |