Merge pull request #243 from strongloop/refactor-mysql-migration
Refactor mysql migration
This commit is contained in:
commit
9f1affdad3
|
@ -13,6 +13,30 @@ module.exports = mixinMigration;
|
||||||
* @param {Object} mysql mysql driver
|
* @param {Object} mysql mysql driver
|
||||||
*/
|
*/
|
||||||
function mixinMigration(MySQL, mysql) {
|
function mixinMigration(MySQL, mysql) {
|
||||||
|
MySQL.prototype.showFields = function(model, cb) {
|
||||||
|
var table = this.tableEscaped(model);
|
||||||
|
var sql = 'SHOW FIELDS FROM ' + table;
|
||||||
|
this.execute(sql, function(err, fields) {
|
||||||
|
if (err) {
|
||||||
|
return cb(err);
|
||||||
|
} else {
|
||||||
|
cb(err, fields);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
MySQL.prototype.showIndexes = function(model, cb) {
|
||||||
|
var table = this.tableEscaped(model);
|
||||||
|
var sql = 'SHOW INDEXES FROM ' + table;
|
||||||
|
this.execute(sql, function(err, indexes) {
|
||||||
|
if (err) {
|
||||||
|
return cb(err);
|
||||||
|
} else {
|
||||||
|
cb(err, indexes);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform autoupdate for the given models
|
* Perform autoupdate for the given models
|
||||||
* @param {String[]} [models] A model name or an array of model names.
|
* @param {String[]} [models] A model name or an array of model names.
|
||||||
|
@ -40,13 +64,8 @@ function mixinMigration(MySQL, mysql) {
|
||||||
done(new Error(g.f('Model not found: %s', model)));
|
done(new Error(g.f('Model not found: %s', model)));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
var table = self.tableEscaped(model);
|
|
||||||
self.execute('SHOW FIELDS FROM ' + table, function(err, fields) {
|
|
||||||
if (err) console.log('Failed to discover "' + table + '" fields', err);
|
|
||||||
|
|
||||||
self.execute('SHOW INDEXES FROM ' + table, function(err, indexes) {
|
|
||||||
if (err) console.log('Failed to discover "' + table + '" indexes', err);
|
|
||||||
|
|
||||||
|
self.getTableStatus(model, function(err, fields, indexes) {
|
||||||
self.discoverForeignKeys(self.table(model), {}, function(err, foreignKeys) {
|
self.discoverForeignKeys(self.table(model), {}, function(err, foreignKeys) {
|
||||||
if (err) console.log('Failed to discover "' + table + '" foreign keys', err);
|
if (err) console.log('Failed to discover "' + table + '" foreign keys', err);
|
||||||
|
|
||||||
|
@ -58,7 +77,6 @@ function mixinMigration(MySQL, mysql) {
|
||||||
if (!err && res && res.newFks && res.newFks.length) {
|
if (!err && res && res.newFks && res.newFks.length) {
|
||||||
foreignKeyStatements.push(res.newFks);
|
foreignKeyStatements.push(res.newFks);
|
||||||
}
|
}
|
||||||
|
|
||||||
done(err);
|
done(err);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -74,13 +92,11 @@ function mixinMigration(MySQL, mysql) {
|
||||||
foreignKeyStatements.push(self.getAlterStatement(model, newFks));
|
foreignKeyStatements.push(self.getAlterStatement(model, newFks));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
done(err);
|
done(err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}, function(err) {
|
}, function(err) {
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
|
|
||||||
|
@ -131,13 +147,7 @@ function mixinMigration(MySQL, mysql) {
|
||||||
models = models || Object.keys(this._models);
|
models = models || Object.keys(this._models);
|
||||||
|
|
||||||
async.each(models, function(model, done) {
|
async.each(models, function(model, done) {
|
||||||
var table = self.tableEscaped(model);
|
self.getTableStatus(model, function(err, fields, indexes) {
|
||||||
self.execute('SHOW FIELDS FROM ' + table, function(err, fields) {
|
|
||||||
if (err) console.log('Failed to discover "' + table + '" fields', err);
|
|
||||||
|
|
||||||
self.execute('SHOW INDEXES FROM ' + table, function(err, indexes) {
|
|
||||||
if (err) console.log('Failed to discover "' + table + '" indexes', err);
|
|
||||||
|
|
||||||
self.discoverForeignKeys(self.table(model), {}, function(err, foreignKeys) {
|
self.discoverForeignKeys(self.table(model), {}, function(err, foreignKeys) {
|
||||||
if (err) console.log('Failed to discover "' + table + '" foreign keys', err);
|
if (err) console.log('Failed to discover "' + table + '" foreign keys', err);
|
||||||
|
|
||||||
|
@ -151,7 +161,6 @@ function mixinMigration(MySQL, mysql) {
|
||||||
}, true);
|
}, true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}, function(err) {
|
}, function(err) {
|
||||||
cb(err, !ok);
|
cb(err, !ok);
|
||||||
});
|
});
|
||||||
|
@ -288,7 +297,6 @@ function mixinMigration(MySQL, mysql) {
|
||||||
if (indexName === 'PRIMARY' ||
|
if (indexName === 'PRIMARY' ||
|
||||||
(m.properties[indexName] && self.id(model, indexName))) return;
|
(m.properties[indexName] && self.id(model, indexName))) return;
|
||||||
|
|
||||||
if (Object.keys(actualFks).indexOf(indexName) > -1) return; //this index is from an FK
|
|
||||||
if (indexNames.indexOf(indexName) === -1 && !m.properties[indexName] ||
|
if (indexNames.indexOf(indexName) === -1 && !m.properties[indexName] ||
|
||||||
m.properties[indexName] && !m.properties[indexName].index) {
|
m.properties[indexName] && !m.properties[indexName].index) {
|
||||||
sql.push('DROP INDEX ' + self.client.escapeId(indexName));
|
sql.push('DROP INDEX ' + self.client.escapeId(indexName));
|
||||||
|
@ -645,24 +653,6 @@ function mixinMigration(MySQL, mysql) {
|
||||||
return line;
|
return line;
|
||||||
};
|
};
|
||||||
|
|
||||||
MySQL.prototype.columnDataType = function(model, property) {
|
|
||||||
var columnMetadata = this.columnMetadata(model, property);
|
|
||||||
var colType = columnMetadata && columnMetadata.dataType;
|
|
||||||
if (colType) {
|
|
||||||
colType = colType.toUpperCase();
|
|
||||||
}
|
|
||||||
var prop = this.getModelDefinition(model).properties[property];
|
|
||||||
if (!prop) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var colLength = columnMetadata && columnMetadata.dataLength ||
|
|
||||||
prop.length || prop.limit;
|
|
||||||
if (colType && colLength) {
|
|
||||||
return colType + '(' + colLength + ')';
|
|
||||||
}
|
|
||||||
return this.buildColumnType(prop);
|
|
||||||
};
|
|
||||||
|
|
||||||
MySQL.prototype.buildColumnType = function buildColumnType(propertyDefinition) {
|
MySQL.prototype.buildColumnType = function buildColumnType(propertyDefinition) {
|
||||||
var dt = '';
|
var dt = '';
|
||||||
var p = propertyDefinition;
|
var p = propertyDefinition;
|
||||||
|
|
Loading…
Reference in New Issue