Ensure that all multi-statement sql functionss are serialized
This commit is contained in:
parent
81df1807e8
commit
4d5894bf04
1 changed files with 36 additions and 18 deletions
54
app/sql.js
54
app/sql.js
|
@ -376,11 +376,17 @@ async function saveMessage(data, { forceSave } = {}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function saveMessages(arrayOfMessages, { forceSave } = {}) {
|
async function saveMessages(arrayOfMessages, { forceSave } = {}) {
|
||||||
await Promise.all([
|
let promise;
|
||||||
db.run('BEGIN TRANSACTION;'),
|
|
||||||
...map(arrayOfMessages, message => saveMessage(message, { forceSave })),
|
db.serialize(() => {
|
||||||
db.run('COMMIT TRANSACTION;'),
|
promise = Promise.all([
|
||||||
]);
|
db.run('BEGIN TRANSACTION;'),
|
||||||
|
...map(arrayOfMessages, message => saveMessage(message, { forceSave })),
|
||||||
|
db.run('COMMIT TRANSACTION;'),
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
await promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function removeMessage(id) {
|
async function removeMessage(id) {
|
||||||
|
@ -569,13 +575,19 @@ async function saveUnprocessed(data, { forceSave } = {}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function saveUnprocesseds(arrayOfUnprocessed, { forceSave } = {}) {
|
async function saveUnprocesseds(arrayOfUnprocessed, { forceSave } = {}) {
|
||||||
await Promise.all([
|
let promise;
|
||||||
db.run('BEGIN TRANSACTION;'),
|
|
||||||
...map(arrayOfUnprocessed, unprocessed =>
|
db.serialize(() => {
|
||||||
saveUnprocessed(unprocessed, { forceSave })
|
promise = Promise.all([
|
||||||
),
|
db.run('BEGIN TRANSACTION;'),
|
||||||
db.run('COMMIT TRANSACTION;'),
|
...map(arrayOfUnprocessed, unprocessed =>
|
||||||
]);
|
saveUnprocessed(unprocessed, { forceSave })
|
||||||
|
),
|
||||||
|
db.run('COMMIT TRANSACTION;'),
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
await promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getUnprocessedById(id) {
|
async function getUnprocessedById(id) {
|
||||||
|
@ -624,12 +636,18 @@ async function removeAllUnprocessed() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function removeAll() {
|
async function removeAll() {
|
||||||
await Promise.all([
|
let promise;
|
||||||
db.run('BEGIN TRANSACTION;'),
|
|
||||||
db.run('DELETE FROM messages;'),
|
db.serialize(() => {
|
||||||
db.run('DELETE FROM unprocessed;'),
|
promise = Promise.all([
|
||||||
db.run('COMMIT TRANSACTION;'),
|
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 }) {
|
async function getMessagesNeedingUpgrade(limit, { maxVersion }) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue