jeep-sqlite
Version:
Browser SQLite Stencil Component
51 lines (50 loc) • 2.18 kB
JavaScript
import { UtilsSQLite } from "../utils/utils-sqlite";
export class UtilsUpgrade {
static async onUpgrade(mDB, vUpgDict, curVersion, targetVersion) {
let changes = -1;
const sortedKeys = new Int32Array(Object.keys(vUpgDict)
.map(item => parseInt(item)))
.sort();
for (const versionKey of sortedKeys) {
if (versionKey > curVersion && versionKey <= targetVersion) {
const statements = vUpgDict[versionKey].statements;
if (statements.length === 0) {
return Promise.reject('onUpgrade: statements not given');
}
try {
// set Foreign Keys Off
await UtilsSQLite.setForeignKeyConstraintsEnabled(mDB.mDb, false);
const initChanges = await UtilsSQLite.dbChanges(mDB.mDb);
await UtilsUpgrade.executeStatementsProcess(mDB, statements);
await UtilsSQLite.setVersion(mDB.mDb, versionKey);
// set Foreign Keys On
await UtilsSQLite.setForeignKeyConstraintsEnabled(mDB.mDb, true);
changes = (await UtilsSQLite.dbChanges(mDB.mDb)) - initChanges;
}
catch (err) {
return Promise.reject(new Error(`onUpgrade: ${err.message}`));
}
}
}
return Promise.resolve(changes);
}
;
static async executeStatementsProcess(mDB, statements) {
try {
await UtilsSQLite.beginTransaction(mDB.mDb, true);
mDB.setIsTransActive(true);
for (const statement of statements) {
await UtilsSQLite.execute(mDB.mDb, statement, false);
}
await UtilsSQLite.commitTransaction(mDB.mDb, true);
mDB.setIsTransActive(false);
return Promise.resolve();
}
catch (err) {
await UtilsSQLite.rollbackTransaction(mDB.mDb, true);
mDB.setIsTransActive(false);
return Promise.reject(`ExecuteStatementProcess: ${err}`);
}
}
}
//# sourceMappingURL=utils-upgrade.js.map