diff options
author | Brendan Abolivier <babolivier@matrix.org> | 2019-10-30 15:56:33 +0000 |
---|---|---|
committer | Brendan Abolivier <babolivier@matrix.org> | 2019-10-30 15:56:33 +0000 |
commit | acd16ad86a8f61ef261fa82960ee3634864db9ed (patch) | |
tree | 82694423f2c22ff1140023c5ca9e935efe6b7a87 /synapse/storage | |
parent | Store labels for new events (diff) | |
download | synapse-acd16ad86a8f61ef261fa82960ee3634864db9ed.tar.xz |
Implement filtering
Diffstat (limited to 'synapse/storage')
-rw-r--r-- | synapse/storage/data_stores/main/stream.py | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/synapse/storage/data_stores/main/stream.py b/synapse/storage/data_stores/main/stream.py index 263999dfca..907d7f20ba 100644 --- a/synapse/storage/data_stores/main/stream.py +++ b/synapse/storage/data_stores/main/stream.py @@ -229,6 +229,14 @@ def filter_to_clause(event_filter): clauses.append("contains_url = ?") args.append(event_filter.contains_url) + # We're only applying the "labels" filter on the database query, because applying the + # "not_labels" filter via a SQL query is non-trivial. Instead, we let + # event_filter.check_fields apply it, which is not as efficient but makes the + # implementation simpler. + if event_filter.labels: + clauses.append("(%s)" % " OR ".join("label = ?" for _ in event_filter.labels)) + args.extend(event_filter.labels) + return " AND ".join(clauses), args @@ -866,6 +874,7 @@ class StreamWorkerStore(EventsWorkerStore, SQLBaseStore): sql = ( "SELECT event_id, topological_ordering, stream_ordering" " FROM events" + " LEFT JOIN event_labels USING (event_id)" " WHERE outlier = ? AND room_id = ? AND %(bounds)s" " ORDER BY topological_ordering %(order)s," " stream_ordering %(order)s LIMIT ?" |