Use 'update or insert' rather than on 'conflict replace'

This commit is contained in:
Erik Johnston 2015-03-23 14:02:34 +00:00
parent 278149f533
commit d5272b1d2c

View File

@ -276,26 +276,33 @@ class TransactionStore(SQLBaseStore):
retry_interval,
)
def _set_destination_retry_timings(cls, txn, destination,
def _set_destination_retry_timings(self, txn, destination,
retry_last_ts, retry_interval):
query = (
"INSERT INTO destinations"
" (destination, retry_last_ts, retry_interval)"
" VALUES (?, ?, ?)"
" ON DUPLICATE KEY UPDATE"
" retry_last_ts=?, retry_interval=?"
"UPDATE destinations"
" SET retry_last_ts = ?, retry_interval = ?"
" WHERE destinations = ?"
)
txn.execute(
query,
(
destination,
retry_last_ts, retry_interval,
retry_last_ts, retry_interval,
retry_last_ts, retry_interval, destination,
)
)
if txn.rowcount == 0:
# destination wasn't already in table. Insert it.
self._simple_insert_txn(
txn,
table="destinations",
values={
"destination": destination,
"retry_last_ts": retry_last_ts,
"retry_interval": retry_interval,
}
)
def get_destinations_needing_retry(self):
"""Get all destinations which are due a retry for sending a transaction.