Delete before forced bulk insert to fix broken migrations
This commit is contained in:
parent
4d5894bf04
commit
0d13d437fe
2 changed files with 23 additions and 1 deletions
|
@ -37,6 +37,7 @@ module.exports = {
|
||||||
saveMessage,
|
saveMessage,
|
||||||
saveMessages,
|
saveMessages,
|
||||||
removeMessage,
|
removeMessage,
|
||||||
|
_removeMessages,
|
||||||
getUnreadByConversation,
|
getUnreadByConversation,
|
||||||
|
|
||||||
removeAllMessagesInConversation,
|
removeAllMessagesInConversation,
|
||||||
|
@ -220,6 +221,11 @@ async function removeMessage(id, { Message }) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note: this method will not clean up external files, just delete from SQL
|
||||||
|
async function _removeMessages(ids) {
|
||||||
|
await channels.removeMessage(ids);
|
||||||
|
}
|
||||||
|
|
||||||
async function getMessageById(id, { Message }) {
|
async function getMessageById(id, { Message }) {
|
||||||
const message = await channels.getMessageById(id);
|
const message = await channels.getMessageById(id);
|
||||||
return new Message(message);
|
return new Message(message);
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
/* global window, IDBKeyRange */
|
/* global window, IDBKeyRange */
|
||||||
|
|
||||||
const { includes, isFunction, isString, last } = require('lodash');
|
const { includes, isFunction, isString, last } = require('lodash');
|
||||||
const { saveMessages, saveUnprocesseds } = require('./data');
|
const {
|
||||||
|
saveMessages,
|
||||||
|
_removeMessages,
|
||||||
|
saveUnprocesseds,
|
||||||
|
removeUnprocessed,
|
||||||
|
} = require('./data');
|
||||||
const {
|
const {
|
||||||
getMessageExportLastIndex,
|
getMessageExportLastIndex,
|
||||||
setMessageExportLastIndex,
|
setMessageExportLastIndex,
|
||||||
|
@ -34,6 +39,7 @@ async function migrateToSQL({ db, clearStores, handleDOMException }) {
|
||||||
const status = await migrateStoreToSQLite({
|
const status = await migrateStoreToSQLite({
|
||||||
db,
|
db,
|
||||||
save: saveMessages,
|
save: saveMessages,
|
||||||
|
remove: _removeMessages,
|
||||||
storeName: 'messages',
|
storeName: 'messages',
|
||||||
handleDOMException,
|
handleDOMException,
|
||||||
lastIndex,
|
lastIndex,
|
||||||
|
@ -54,6 +60,7 @@ async function migrateToSQL({ db, clearStores, handleDOMException }) {
|
||||||
const status = await migrateStoreToSQLite({
|
const status = await migrateStoreToSQLite({
|
||||||
db,
|
db,
|
||||||
save: saveUnprocesseds,
|
save: saveUnprocesseds,
|
||||||
|
remove: removeUnprocessed,
|
||||||
storeName: 'unprocessed',
|
storeName: 'unprocessed',
|
||||||
handleDOMException,
|
handleDOMException,
|
||||||
lastIndex,
|
lastIndex,
|
||||||
|
@ -74,6 +81,7 @@ async function migrateToSQL({ db, clearStores, handleDOMException }) {
|
||||||
async function migrateStoreToSQLite({
|
async function migrateStoreToSQLite({
|
||||||
db,
|
db,
|
||||||
save,
|
save,
|
||||||
|
remove,
|
||||||
storeName,
|
storeName,
|
||||||
handleDOMException,
|
handleDOMException,
|
||||||
lastIndex = null,
|
lastIndex = null,
|
||||||
|
@ -85,6 +93,9 @@ async function migrateStoreToSQLite({
|
||||||
if (!isFunction(save)) {
|
if (!isFunction(save)) {
|
||||||
throw new Error('Need save function!');
|
throw new Error('Need save function!');
|
||||||
}
|
}
|
||||||
|
if (!isFunction(remove)) {
|
||||||
|
throw new Error('Need remove function!');
|
||||||
|
}
|
||||||
if (!isString(storeName)) {
|
if (!isString(storeName)) {
|
||||||
throw new Error('Need storeName!');
|
throw new Error('Need storeName!');
|
||||||
}
|
}
|
||||||
|
@ -151,6 +162,11 @@ async function migrateStoreToSQLite({
|
||||||
const { items, complete } = await queryPromise;
|
const { items, complete } = await queryPromise;
|
||||||
|
|
||||||
if (items.length) {
|
if (items.length) {
|
||||||
|
// Because of the force save and some failed imports, we're going to delete before
|
||||||
|
// we attempt to insert.
|
||||||
|
const ids = items.map(item => item.id);
|
||||||
|
await remove(ids);
|
||||||
|
|
||||||
// We need to pass forceSave parameter, because these items already have an
|
// We need to pass forceSave parameter, because these items already have an
|
||||||
// id key. Normally, this call would be interpreted as an update request.
|
// id key. Normally, this call would be interpreted as an update request.
|
||||||
await save(items, { forceSave: true });
|
await save(items, { forceSave: true });
|
||||||
|
|
Loading…
Add table
Reference in a new issue