66 lines
2.1 KiB
JavaScript
66 lines
2.1 KiB
JavaScript
const mysql = require('mysql2/promise');
|
|
const fs = require('fs-extra');
|
|
|
|
(async () => {
|
|
try {
|
|
const connection = await mysql.createConnection({
|
|
host: 'localhost',
|
|
user: 'root',
|
|
multipleStatements: true
|
|
});
|
|
let changesDir = './changes';
|
|
let results = await connection.query("SELECT dbVersion FROM util.config");
|
|
if (results[0].length != 1)
|
|
throw new Error('There must be exactly one row in the configuration table');
|
|
let version = results[0][0].dbVersion;
|
|
if (!version)
|
|
throw new Error('Database version not defined');
|
|
let dirs = await fs.readdir(changesDir);
|
|
dirs.sort(compareVersions);
|
|
let lastVersion;
|
|
|
|
for (let dir of dirs) {
|
|
if (compareVersions(dir, version) <= 0) continue;
|
|
let path = `${changesDir}/${dir}`;
|
|
let files = await fs.readdir(path);
|
|
files.sort();
|
|
console.log(dir);
|
|
for (let file of files) {
|
|
let sql = await fs.readFile(`${path}/${file}`, 'utf8');
|
|
if (/^\s*$/.test(sql)) continue;
|
|
await connection.query(sql);
|
|
console.log(` - ${file}`);
|
|
}
|
|
lastVersion = dir;
|
|
}
|
|
if (lastVersion) {
|
|
await connection.query("UPDATE util.config SET dbVersion = ?", [lastVersion]);
|
|
console.log(`Database upgraded successfully to version ${lastVersion}`);
|
|
} else {
|
|
console.log("Database is alredy in the last version");
|
|
}
|
|
await connection.end();
|
|
process.exit();
|
|
} catch (err) {
|
|
console.error(err);
|
|
process.exit(1);
|
|
}
|
|
})();
|
|
|
|
function compareVersions(ver1, ver2) {
|
|
let diff;
|
|
ver1 = ver1.split('.');
|
|
ver2 = ver2.split('.');
|
|
|
|
diff = parseInt(ver1[0]) - parseInt(ver2[0]);
|
|
if (diff !== 0) return diff;
|
|
|
|
diff = parseInt(ver1[1]) - parseInt(ver2[1]);
|
|
if (diff !== 0) return diff;
|
|
|
|
diff = parseInt(ver1[2]) - parseInt(ver2[2]);
|
|
if (diff !== 0) return diff;
|
|
|
|
return 0;
|
|
}
|