diff options
author | Erik Johnston <erik@matrix.org> | 2017-03-14 11:35:05 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2017-03-14 11:35:05 +0000 |
commit | bb256ac96f2a10b60708d5273bee5df2533f10b8 (patch) | |
tree | ae6d19a234b566ff4fc58ec1d7b47c9622843b2c /synapse/storage/_base.py | |
parent | Add new storage function to slave store (diff) | |
parent | Merge pull request #1996 from matrix-org/erikj/fix_current_state (diff) | |
download | synapse-bb256ac96f2a10b60708d5273bee5df2533f10b8.tar.xz |
Merge branch 'develop' of github.com:matrix-org/synapse into erikj/public_list_speed
Diffstat (limited to 'synapse/storage/_base.py')
-rw-r--r-- | synapse/storage/_base.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py index a7a8ec9b7b..13b106bba1 100644 --- a/synapse/storage/_base.py +++ b/synapse/storage/_base.py @@ -840,6 +840,47 @@ class SQLBaseStore(object): return txn.execute(sql, keyvalues.values()) + def _simple_delete_many(self, table, column, iterable, keyvalues, desc): + return self.runInteraction( + desc, self._simple_delete_many_txn, table, column, iterable, keyvalues + ) + + @staticmethod + def _simple_delete_many_txn(txn, table, column, iterable, keyvalues): + """Executes a DELETE query on the named table. + + Filters rows by if value of `column` is in `iterable`. + + Args: + txn : Transaction object + table : string giving the table name + column : column name to test for inclusion against `iterable` + iterable : list + keyvalues : dict of column names and values to select the rows with + """ + if not iterable: + return + + sql = "DELETE FROM %s" % table + + clauses = [] + values = [] + clauses.append( + "%s IN (%s)" % (column, ",".join("?" for _ in iterable)) + ) + values.extend(iterable) + + for key, value in keyvalues.items(): + clauses.append("%s = ?" % (key,)) + values.append(value) + + if clauses: + sql = "%s WHERE %s" % ( + sql, + " AND ".join(clauses), + ) + return txn.execute(sql, values) + def _get_cache_dict(self, db_conn, table, entity_column, stream_column, max_value, limit=100000): # Fetch a mapping of room_id -> max stream position for "recent" rooms. |