UNPKG

mysql-script-deploy

Version:

Deploys your schema changes and routines, it versions all your changes and roles back failed routines to previous versions

59 lines (52 loc) 2.26 kB
module.exports = function(db) { var STATUS = { PENDING: 'pending', SUCCESS: 'success', FAILED: 'failed' }; function getLastVersionNumber(callback) { var sql = 'select version from database_script_history where status="success" order by version desc limit 1'; db.query(sql, function(err, result) { if (err) return callback(err); var lastVersion = 0; if (result.length > 0) lastVersion = result[0].version; callback(null, lastVersion); }); } function insertAttemptIntoHistoryAsPending(values, callback) { var sql = 'insert into database_script_history (version, status, name) values (?, ?, ?)'; db.query(sql, [values.scriptVersion, STATUS.PENDING, values.name], function(err) { if (err) return callback(err); callback(null, values); }) } function executeScript(values, callback) { db.query(values.scriptContent, function(err) { if (err) { updateHistory(STATUS.FAILED, new Date(), values.scriptVersion, function() { console.warn('| Script version "%d" failed to apply.', values.scriptVersion); callback(err); }); } else { updateHistory(STATUS.SUCCESS, new Date(), values.scriptVersion, function(err) { if (err) return callback(err); console.log('| Script version "%d" was successfully applied to the database.', values.scriptVersion); callback(); }) } }) } // PRIVATE FUNCTIONS function updateHistory(status, createdAt, version, callback) { var sql = 'update database_script_history set status=?, createdAt=? where version=? and status="pending"'; db.query(sql, [status, createdAt, version], function(err) { if (err) return callback(err); callback(); }) } return { getLastVersionNumber: getLastVersionNumber, insertAttemptIntoHistoryAsPending: insertAttemptIntoHistoryAsPending, executeScript: executeScript }; };