mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-05 18:34:39 +03:00
cddd23f926
This frees us up to enforce one single point of access, thus paving the way towards allowing us to initialize the models at are request, and not when it's require(). addresses #2170
66 lines
2.4 KiB
JavaScript
66 lines
2.4 KiB
JavaScript
var _ = require('lodash'),
|
|
errors = require('../../errors'),
|
|
config = require('../../config'),
|
|
|
|
defaultSettings = require('../default-settings'),
|
|
|
|
initialVersion = '000',
|
|
defaultDatabaseVersion;
|
|
|
|
// Default Database Version
|
|
// The migration version number according to the hardcoded default settings
|
|
// This is the version the database should be at or migrated to
|
|
function getDefaultDatabaseVersion() {
|
|
if (!defaultDatabaseVersion) {
|
|
// This be the current version according to the software
|
|
defaultDatabaseVersion = defaultSettings.core.databaseVersion.defaultValue;
|
|
}
|
|
|
|
return defaultDatabaseVersion;
|
|
}
|
|
|
|
// Database Current Version
|
|
// The migration version number according to the database
|
|
// This is what the database is currently at and may need to be updated
|
|
function getDatabaseVersion() {
|
|
var knex = config().database.knex;
|
|
|
|
return knex.schema.hasTable('settings').then(function (exists) {
|
|
// Check for the current version from the settings table
|
|
if (exists) {
|
|
// Temporary code to deal with old databases with currentVersion settings
|
|
return knex('settings')
|
|
.where('key', 'databaseVersion')
|
|
.orWhere('key', 'currentVersion')
|
|
.select('value')
|
|
.then(function (versions) {
|
|
var databaseVersion = _.reduce(versions, function (memo, version) {
|
|
if (isNaN(version.value)) {
|
|
errors.throwError('Database version is not recognised');
|
|
}
|
|
return parseInt(version.value, 10) > parseInt(memo, 10) ? version.value : memo;
|
|
}, initialVersion);
|
|
|
|
if (!databaseVersion || databaseVersion.length === 0) {
|
|
// we didn't get a response we understood, assume initialVersion
|
|
databaseVersion = initialVersion;
|
|
}
|
|
|
|
return databaseVersion;
|
|
});
|
|
}
|
|
throw new Error('Settings table does not exist');
|
|
});
|
|
}
|
|
|
|
function setDatabaseVersion() {
|
|
return config().database.knex('settings')
|
|
.where('key', 'databaseVersion')
|
|
.update({ 'value': defaultDatabaseVersion });
|
|
}
|
|
|
|
module.exports = {
|
|
getDefaultDatabaseVersion: getDefaultDatabaseVersion,
|
|
getDatabaseVersion: getDatabaseVersion,
|
|
setDatabaseVersion: setDatabaseVersion
|
|
}; |