Ensure that all multi-statement sql functionss are serialized

This commit is contained in:
Scott Nonnenberg 2018-07-31 19:29:51 -07:00
parent 81df1807e8
commit 4d5894bf04

View file

@ -376,11 +376,17 @@ async function saveMessage(data, { forceSave } = {}) {
}
async function saveMessages(arrayOfMessages, { forceSave } = {}) {
await Promise.all([
db.run('BEGIN TRANSACTION;'),
...map(arrayOfMessages, message => saveMessage(message, { forceSave })),
db.run('COMMIT TRANSACTION;'),
]);
let promise;
db.serialize(() => {
promise = Promise.all([
db.run('BEGIN TRANSACTION;'),
...map(arrayOfMessages, message => saveMessage(message, { forceSave })),
db.run('COMMIT TRANSACTION;'),
]);
});
await promise;
}
async function removeMessage(id) {
@ -569,13 +575,19 @@ async function saveUnprocessed(data, { forceSave } = {}) {
}
async function saveUnprocesseds(arrayOfUnprocessed, { forceSave } = {}) {
await Promise.all([
db.run('BEGIN TRANSACTION;'),
...map(arrayOfUnprocessed, unprocessed =>
saveUnprocessed(unprocessed, { forceSave })
),
db.run('COMMIT TRANSACTION;'),
]);
let promise;
db.serialize(() => {
promise = Promise.all([
db.run('BEGIN TRANSACTION;'),
...map(arrayOfUnprocessed, unprocessed =>
saveUnprocessed(unprocessed, { forceSave })
),
db.run('COMMIT TRANSACTION;'),
]);
});
await promise;
}
async function getUnprocessedById(id) {
@ -624,12 +636,18 @@ async function removeAllUnprocessed() {
}
async function removeAll() {
await Promise.all([
db.run('BEGIN TRANSACTION;'),
db.run('DELETE FROM messages;'),
db.run('DELETE FROM unprocessed;'),
db.run('COMMIT TRANSACTION;'),
]);
let promise;
db.serialize(() => {
promise = Promise.all([
db.run('BEGIN TRANSACTION;'),
db.run('DELETE FROM messages;'),
db.run('DELETE FROM unprocessed;'),
db.run('COMMIT TRANSACTION;'),
]);
});
await promise;
}
async function getMessagesNeedingUpgrade(limit, { maxVersion }) {