sync/lib/database/update.js

66 lines
2.0 KiB
JavaScript
Raw Normal View History

2014-02-01 18:41:06 +00:00
var db = require("../database");
var Logger = require("../logger");
2014-06-03 03:47:21 +00:00
var Q = require("q");
2014-06-03 03:47:21 +00:00
const DB_VERSION = 2;
module.exports.checkVersion = function () {
db.query("SELECT `key`,`value` FROM `meta` WHERE `key`=?", ["db_version"], function (err, rows) {
if (err) {
return;
}
if (rows.length === 0) {
Logger.errlog.log("[Warning] db_version key missing from database. Setting " +
"db_version=" + DB_VERSION);
db.query("INSERT INTO `meta` (`key`, `value`) VALUES ('db_version', ?)",
[DB_VERSION],
function (err) {
});
} else {
var v = parseInt(rows[0].value);
var next = function () {
if (v < DB_VERSION) {
update(v++, next);
} else {
db.query("UPDATE `meta` SET `value`=? WHERE `key`='db_version'",
[DB_VERSION]);
}
};
update(v++, next);
}
});
};
function update(version, cb) {
2014-06-03 03:47:21 +00:00
if (version === 1) {
addMetaColumnToLibraries(cb);
}
}
function addMetaColumnToLibraries(cb) {
2014-06-04 04:21:00 +00:00
Logger.syslog.log("[database] db version indicates channel libraries don't have " +
"meta column. Updating...");
2014-06-03 03:47:21 +00:00
Q.nfcall(db.query, "SHOW TABLES")
.then(function (rows) {
rows = rows.map(function (r) {
return r[Object.keys(r)[0]];
}).filter(function (r) {
return r.match(/_library$/);
});
var queue = [];
rows.forEach(function (table) {
queue.push(Q.nfcall(db.query, "ALTER TABLE `" + table + "` ADD meta TEXT")
.then(function () {
Logger.syslog.log("Added meta column to " + table);
})
);
});
return Q.all(queue);
}).catch(function (err) {
Logger.errlog.log("Adding meta column to library tables failed: " + err);
}).done(cb);
}