Switch INSERT + UPDATE to UPSERT

This commit is contained in:
Andrew Morgan 2019-11-18 17:47:41 +00:00
parent 657d614f6a
commit 1d9b29190b

View file

@ -359,20 +359,14 @@ class DeviceInboxStore(DeviceInboxWorkerStore, DeviceInboxBackgroundUpdateStore)
self, txn, stream_id, messages_by_user_then_device self, txn, stream_id, messages_by_user_then_device
): ):
# Compatible method of performing an upsert # Compatible method of performing an upsert
sql = "SELECT stream_id FROM device_max_stream_id" sql = """
INSERT INTO device_max_stream_id
txn.execute(sql) (stream_id) VALUES (?)
rows = txn.fetchone() ON CONFLICT DO UPDATE device_max_stream_id
if rows: SET stream_id = ?
db_stream_id = rows[0] WHERE stream_id < ?
if db_stream_id < stream_id: """
# Insert the new stream_id txn.execute(sql, (stream_id, stream_id))
sql = "UPDATE device_max_stream_id SET stream_id = ?"
else:
# No rows, perform an insert
sql = "INSERT INTO device_max_stream_id (stream_id) VALUES (?)"
txn.execute(sql, (stream_id,))
local_by_user_then_device = {} local_by_user_then_device = {}
for user_id, messages_by_device in messages_by_user_then_device.items(): for user_id, messages_by_device in messages_by_user_then_device.items():