Use Loki Schema for database versioning

pull/381/head
sachaaaaa 6 years ago
parent d208614909
commit 88c1454c18

@ -739,28 +739,6 @@ async function updateToSchemaVersion11(currentVersion, instance) {
console.log('updateToSchemaVersion11: success!');
}
async function updateToSchemaVersion12(currentVersion, instance) {
if (currentVersion >= 12) {
return;
}
console.log('updateToSchemaVersion12: starting...');
await instance.run('BEGIN TRANSACTION;');
await instance.run(
`CREATE TABLE pairingAuthorisations(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
issuerPubKey VARCHAR(255),
secondaryDevicePubKey VARCHAR(255),
signature VARCHAR(255),
json TEXT
);`
);
await instance.run('PRAGMA schema_version = 12;');
await instance.run('COMMIT TRANSACTION;');
console.log('updateToSchemaVersion12: success!');
}
const SCHEMA_VERSIONS = [
updateToSchemaVersion1,
updateToSchemaVersion2,
@ -773,7 +751,6 @@ const SCHEMA_VERSIONS = [
updateToSchemaVersion9,
updateToSchemaVersion10,
updateToSchemaVersion11,
updateToSchemaVersion12,
];
async function updateSchema(instance) {
@ -795,6 +772,85 @@ async function updateSchema(instance) {
// eslint-disable-next-line no-await-in-loop
await runSchemaUpdate(schemaVersion, instance);
}
await updateLokiSchema(instance);
}
const LOKI_SCHEMA_VERSIONS = [
updateToLokiSchemaVersion2,
];
async function updateToLokiSchemaVersion2(currentVersion, instance) {
if (currentVersion >= 2) {
return;
}
console.log('updateToLokiSchemaVersion2: starting...');
await instance.run('BEGIN TRANSACTION;');
await instance.run(
`CREATE TABLE pairingAuthorisations(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
issuerPubKey VARCHAR(255),
secondaryDevicePubKey VARCHAR(255),
signature VARCHAR(255),
json TEXT
);`
);
await instance.run(
`INSERT INTO loki_schema (
version
) values (
2
);`
);
await instance.run('COMMIT TRANSACTION;');
console.log('updateToLokiSchemaVersion2: success!');
}
async function updateLokiSchema(instance) {
const result = await instance.get("SELECT name FROM sqlite_master WHERE type = 'table' AND name='loki_schema'");
if (!result) {
await createLokiSchemaTable(instance);
}
const lokiSchemaVersion = await getLokiSchemaVersion(instance);
console.log(
'updateLokiSchema:',
`Current loki schema version: ${lokiSchemaVersion};`,
`Most recent schema version: ${LOKI_SCHEMA_VERSIONS.length};`
);
for (let index = 0, max = LOKI_SCHEMA_VERSIONS.length; index < max; index += 1) {
const runSchemaUpdate = LOKI_SCHEMA_VERSIONS[index];
// Yes, we really want to do this asynchronously, in order
// eslint-disable-next-line no-await-in-loop
await runSchemaUpdate(lokiSchemaVersion, instance);
}
}
async function getLokiSchemaVersion(instance) {
const result = await instance.get('SELECT version FROM loki_schema WHERE version = (SELECT MAX(version) FROM loki_schema);');
if (!result.version) {
return 0;
}
return result.version;
}
async function createLokiSchemaTable(instance) {
await instance.run('BEGIN TRANSACTION;');
await instance.run(
`CREATE TABLE loki_schema(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
version INTEGER
);`
);
await instance.run(
`INSERT INTO loki_schema (
version
) values (
0
);`
);
await instance.run('COMMIT TRANSACTION;');
}
let db;

Loading…
Cancel
Save