diff options
author | Erik Johnston <erik@matrix.org> | 2015-06-25 17:18:19 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-06-25 17:29:34 +0100 |
commit | 5130d80d79fe1f95ce03b8f1cfd4fbf0a32f5ac8 (patch) | |
tree | e16d302641072f6a700d3d65e919c7cb01447e47 /synapse/storage/state.py | |
parent | Batch SELECTs in _get_auth_chain_ids_txn (diff) | |
download | synapse-5130d80d79fe1f95ce03b8f1cfd4fbf0a32f5ac8.tar.xz |
Add bulk insert events API
Diffstat (limited to 'synapse/storage/state.py')
-rw-r--r-- | synapse/storage/state.py | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/synapse/storage/state.py b/synapse/storage/state.py index f2b17f29ea..61214e2b2a 100644 --- a/synapse/storage/state.py +++ b/synapse/storage/state.py @@ -100,16 +100,23 @@ class StateStore(SQLBaseStore): ) def _store_state_groups_txn(self, txn, event, context): - if context.current_state is None: - return + return self._store_mult_state_groups_txn(txn, [(event, context)]) - state_events = dict(context.current_state) + def _store_mult_state_groups_txn(self, txn, events_and_contexts): + state_groups = {} + for event, context in events_and_contexts: + if context.current_state is None: + continue - if event.is_state(): - state_events[(event.type, event.state_key)] = event + if context.state_group is not None: + state_groups[event.event_id] = context.state_group + continue + + state_events = dict(context.current_state) + + if event.is_state(): + state_events[(event.type, event.state_key)] = event - state_group = context.state_group - if not state_group: state_group = self._state_groups_id_gen.get_next_txn(txn) self._simple_insert_txn( txn, @@ -135,14 +142,19 @@ class StateStore(SQLBaseStore): for state in state_events.values() ], ) + state_groups[event.event_id] = state_group - self._simple_insert_txn( + self._simple_insert_many_txn( txn, table="event_to_state_groups", - values={ - "state_group": state_group, - "event_id": event.event_id, - }, + values=[ + { + "state_group": state_groups[event.event_id], + "event_id": event.event_id, + } + for event, context in events_and_contexts + if context.current_state is not None + ], ) @defer.inlineCallbacks |