不要怂,就是干,撸起袖子干!

Commit 489099fc by Trey Thomas

MSSQL: drop foreign key before dropping column

1 parent f3327436
...@@ -507,7 +507,7 @@ var QueryGenerator = { ...@@ -507,7 +507,7 @@ var QueryGenerator = {
return '[' + identifier.replace(/[\[\]']+/g,'') + ']'; return '[' + identifier.replace(/[\[\]']+/g,'') + ']';
}, },
getForeignKeysQuery: function(table, databaseName) { getForeignKeysQuery: function(table) {
var tableName = table.tableName || table; var tableName = table.tableName || table;
var sql = [ var sql = [
'SELECT', 'SELECT',
...@@ -525,6 +525,27 @@ var QueryGenerator = { ...@@ -525,6 +525,27 @@ var QueryGenerator = {
return sql; return sql;
}, },
getForeignKeyQuery: function(table, attributeName) {
var tableName = table.tableName || table;
var sql = [
'SELECT',
'constraint_name = TC.CONSTRAINT_NAME',
'FROM',
'INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC',
'JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU',
'ON TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME',
"WHERE TC.CONSTRAINT_TYPE = 'FOREIGN KEY'",
'AND TC.TABLE_NAME =', wrapSingleQuote(tableName),
'AND CCU.COLUMN_NAME =', wrapSingleQuote(attributeName),
].join(' ');
if (table.schema) {
sql += ' AND TC.TABLE_SCHEMA =' + wrapSingleQuote(table.schema);
}
return sql;
},
dropForeignKeyQuery: function(tableName, foreignKey) { dropForeignKeyQuery: function(tableName, foreignKey) {
return Utils._.template('ALTER TABLE <%= table %> DROP <%= key %>')({ return Utils._.template('ALTER TABLE <%= table %> DROP <%= key %>')({
table: this.quoteTable(tableName), table: this.quoteTable(tableName),
......
...@@ -33,6 +33,18 @@ var removeColumn = function (tableName, attributeName, options) { ...@@ -33,6 +33,18 @@ var removeColumn = function (tableName, attributeName, options) {
return self.sequelize.query(dropConstraintSql, { raw: true, logging: options.logging}); return self.sequelize.query(dropConstraintSql, { raw: true, logging: options.logging});
}) })
.then(function () { .then(function () {
var findForeignKeySql = self.QueryGenerator.getForeignKeyQuery(tableName, attributeName);
return self.sequelize.query(findForeignKeySql , { raw: true, logging: options.logging});
})
.spread(function (results) {
if (!results.length) {
// No foreign key constraints found, so we can remove the column
return;
}
var dropForeignKeySql = self.QueryGenerator.dropForeignKeyQuery(tableName, results[0].constraint_name);
return self.sequelize.query(dropForeignKeySql , { raw: true, logging: options.logging});
})
.then(function () {
var removeSql = self.QueryGenerator.removeColumnQuery(tableName, attributeName); var removeSql = self.QueryGenerator.removeColumnQuery(tableName, attributeName);
return self.sequelize.query(removeSql, { raw: true, logging: options.logging}); return self.sequelize.query(removeSql, { raw: true, logging: options.logging});
}); });
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!