12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // ██████╗ ██████╗ ██████╗ ██████╗
- // ██╔══██╗██╔══██╗██╔═══██╗██╔══██╗
- // ██║ ██║██████╔╝██║ ██║██████╔╝
- // ██║ ██║██╔══██╗██║ ██║██╔═══╝
- // ██████╔╝██║ ██║╚██████╔╝██║
- // ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝
- //
- // Drops each table in the database and rebuilds it with the new model definition/
- var _ = require('@sailshq/lodash');
- var async = require('async');
- module.exports = function dropStrategy(orm, cb) {
- // Refuse to run this migration strategy in production.
- if (process.env.NODE_ENV === 'production' && !process.env.ALLOW_UNSAFE_MIGRATIONS) {
- return cb(new Error('`migrate: \'drop\'` strategy is not supported in production, please change to `migrate: \'safe\'`.'));
- }
- async.each(_.keys(orm.collections), function simultaneouslyMigrateEachModel(modelIdentity, next) {
- var WLModel = orm.collections[modelIdentity];
- // Grab the adapter to perform the query on
- var datastoreName = WLModel.datastore;
- var WLAdapter = orm.datastores[datastoreName].adapter;
- // Set a tableName to use
- var tableName = WLModel.tableName;
- // Build a dictionary to represent the underlying physical database structure
- var tableDDLSpec = {};
- _.each(WLModel.schema, function parseAttribute(wlsAttrDef) {
- // If this is a plural association, then skip it.
- // (it is impossible for a key from this error to match up with one of these-- they don't even have column names)
- if (wlsAttrDef.collection) {
- return;
- }
- var columnName = wlsAttrDef.columnName;
- // If the attribute doesn't have an `autoMigrations` key on it, ignore it.
- if (!_.has(wlsAttrDef, 'autoMigrations')) {
- return;
- }
- tableDDLSpec[columnName] = wlsAttrDef.autoMigrations;
- });
- // Set Primary Key flag on the primary key attribute
- var primaryKeyAttrName = WLModel.primaryKey;
- var primaryKey = WLModel.schema[primaryKeyAttrName];
- if (primaryKey) {
- var pkColumnName = primaryKey.columnName;
- tableDDLSpec[pkColumnName].primaryKey = true;
- }
- // ╔╦╗╦═╗╔═╗╔═╗ ┌┬┐┌─┐┌┐ ┬ ┌─┐
- // ║║╠╦╝║ ║╠═╝ │ ├─┤├┴┐│ ├┤
- // ═╩╝╩╚═╚═╝╩ ┴ ┴ ┴└─┘┴─┘└─┘
- WLAdapter.drop(datastoreName, tableName, undefined, function dropCallback(err) {
- if (err) {
- return next(err);
- }
- // ╔╦╗╔═╗╔═╗╦╔╗╔╔═╗ ┌┬┐┌─┐┌┐ ┬ ┌─┐
- // ║║║╣ ╠╣ ║║║║║╣ │ ├─┤├┴┐│ ├┤
- // ═╩╝╚═╝╚ ╩╝╚╝╚═╝ ┴ ┴ ┴└─┘┴─┘└─┘
- WLAdapter.define(datastoreName, tableName, tableDDLSpec, function defineCallback(err) {
- if (err) {
- return next(err);
- }
- return next();
- });
- });
- }, function afterMigrate(err) {
- if (err) {
- return cb(err);
- }
- return cb();
- });
- };
|