Update foreign key creation table name handling

This commit is contained in:
Matthew Dickinson 2016-09-19 17:44:59 -04:00
parent 782959cf20
commit 940032f4dd
1 changed files with 22 additions and 6 deletions

View File

@ -42,7 +42,7 @@ function mixinMigration(MySQL, mysql) {
var table = self.tableEscaped(model);
self.execute('SHOW FIELDS FROM ' + table, function(err, fields) {
self.execute('SHOW INDEXES FROM ' + table, function(err, indexes) {
self.discoverForeignKeys(model, {}, function(discoverErr, foreignKeys) {
self.discoverForeignKeys(self.table(model), {}, function(discoverErr, foreignKeys) {
if (!err && fields && fields.length) {
self.alterTable(model, fields, indexes, foreignKeys, done);
} else {
@ -95,7 +95,7 @@ function mixinMigration(MySQL, mysql) {
var table = self.tableEscaped(model);
self.execute('SHOW FIELDS FROM ' + table, function(err, fields) {
self.execute('SHOW INDEXES FROM ' + table, function(err, indexes) {
self.discoverForeignKeys(model, {}, function(discoverErr, foreignKeys) {
self.discoverForeignKeys(self.table(model), {}, function(discoverErr, foreignKeys) {
self.alterTable(model, fields, indexes, foreignKeys, function(err, needAlter) {
if (err) {
return done(err);
@ -339,7 +339,10 @@ function mixinMigration(MySQL, mysql) {
var oldKeyNames = actualFks.map(function(oldKey) { return oldKey.fkName; });
newFkNames.filter(function(key) { return !~oldKeyNames.indexOf(key); })
.forEach(function(key) {
sql.push(self.buildForeignKeyDefinition(m, key));
var constraint = self.buildForeignKeyDefinition(model, key);
if (constraint) {
sql.push('ADD ' + constraint);
}
});
}
@ -412,12 +415,17 @@ function mixinMigration(MySQL, mysql) {
};
MySQL.prototype.buildForeignKeyDefinition = function(model, keyName) {
var fk = model.settings.foreignKeys[keyName];
//TODO validate that these are in the same DB, etc.
//TODO this is probably a better place to check this than in autoupdate or buildColumnDefinitions
var definition = this.getModelDefinition(model);
var fk = definition.settings.foreignKeys[keyName];
if (fk) {
var fkEntity = typeof fk.entity === "object" ? fk.entity : {name: fk.entity}; //this.getModelDefinition(fk.entity);
//TODO verify that the other model in the same DB
return ' ADD CONSTRAINT ' + this.client.escapeId(fk.name) +
return ' CONSTRAINT ' + this.client.escapeId(fk.name) +
' FOREIGN KEY (' + fk.foreignKey + ')' +
' REFERENCES ' + this.tableEscaped(fk.entity.name) +
' REFERENCES ' + this.tableEscaped(fkEntity.name) +
'(' + this.client.escapeId(fk.entityKey) + ')';
}
return '';
@ -460,6 +468,14 @@ function mixinMigration(MySQL, mysql) {
indexes.forEach(function(i) {
sql.push(i);
});
// var foreignKeys = definition.settings.foreignKeys || {};
// for (var fk in foreignKeys) {
// var constraint = self.buildForeignKeyDefinition(model, fk);
// if (constraint) {
// sql.push(constraint);
// }
// }
return sql.join(',\n ');
};