mirror of
https://github.com/element-hq/synapse
synced 2024-09-06 01:50:08 +00:00
Merge pull request #2219 from krombel/avoid_duplicate_filters
only add new filter when not existent prevoisly
This commit is contained in:
commit
71995e1397
1 changed files with 11 additions and 1 deletions
|
@ -19,6 +19,7 @@ from ._base import SQLBaseStore
|
||||||
from synapse.api.errors import SynapseError, Codes
|
from synapse.api.errors import SynapseError, Codes
|
||||||
from synapse.util.caches.descriptors import cachedInlineCallbacks
|
from synapse.util.caches.descriptors import cachedInlineCallbacks
|
||||||
|
|
||||||
|
from canonicaljson import encode_canonical_json
|
||||||
import simplejson as json
|
import simplejson as json
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,11 +47,20 @@ class FilteringStore(SQLBaseStore):
|
||||||
defer.returnValue(json.loads(str(def_json).decode("utf-8")))
|
defer.returnValue(json.loads(str(def_json).decode("utf-8")))
|
||||||
|
|
||||||
def add_user_filter(self, user_localpart, user_filter):
|
def add_user_filter(self, user_localpart, user_filter):
|
||||||
def_json = json.dumps(user_filter).encode("utf-8")
|
def_json = encode_canonical_json(user_filter)
|
||||||
|
|
||||||
# Need an atomic transaction to SELECT the maximal ID so far then
|
# Need an atomic transaction to SELECT the maximal ID so far then
|
||||||
# INSERT a new one
|
# INSERT a new one
|
||||||
def _do_txn(txn):
|
def _do_txn(txn):
|
||||||
|
sql = (
|
||||||
|
"SELECT filter_id FROM user_filters "
|
||||||
|
"WHERE user_id = ? AND filter_json = ?"
|
||||||
|
)
|
||||||
|
txn.execute(sql, (user_localpart, def_json))
|
||||||
|
filter_id_response = txn.fetchone()
|
||||||
|
if filter_id_response is not None:
|
||||||
|
return filter_id_response[0]
|
||||||
|
|
||||||
sql = (
|
sql = (
|
||||||
"SELECT MAX(filter_id) FROM user_filters "
|
"SELECT MAX(filter_id) FROM user_filters "
|
||||||
"WHERE user_id = ?"
|
"WHERE user_id = ?"
|
||||||
|
|
Loading…
Reference in a new issue