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

Commit e936f9f0 by Matt Broadstone

remove as much code from SqlGenerator as possible

1 parent 93afadd6
...@@ -91,35 +91,49 @@ module.exports = (function() { ...@@ -91,35 +91,49 @@ module.exports = (function() {
return Utils._.template(query)(values).trim() + ";"; return Utils._.template(query)(values).trim() + ";";
}, },
addColumnQuery: function(tableName, key, dataType) { addColumnQuery: function(table, key, dataType) {
// FIXME: attributeToSQL SHOULD be using attributes in addColumnSql // FIXME: attributeToSQL SHOULD be using attributes in addColumnQuery
// but instead we need to pass the key along as the field here // but instead we need to pass the key along as the field here
dataType.field = key; dataType.field = key;
var query = [ var query = 'ALTER TABLE <%= table %> ADD <%= attribute %>;'
SqlGenerator.alterTableSql(tableName), , attribute = Utils._.template('<%= key %> <%= definition %>')({
SqlGenerator.addColumnSql(key, dataType) key: this.quoteIdentifier(key),
].join(' ') + ';'; definition: this.attributeToSQL(dataType, {
context: 'addColumn'
})
});
return query; return Utils._.template(query)({
table: this.quoteTable(table),
attribute: attribute
});
}, },
removeColumnQuery: function(tableName, attributeName) { removeColumnQuery: function(tableName, attributeName) {
var query = [ var query = 'ALTER TABLE <%= tableName %> DROP <%= attributeName %>;';
SqlGenerator.alterTableSql(tableName), return Utils._.template(query)({
SqlGenerator.dropSql(attributeName) tableName: this.quoteTable(tableName),
].join(' ') + ';'; attributeName: this.quoteIdentifier(attributeName)
return query; });
}, },
changeColumnQuery: function(tableName, attributes) { changeColumnQuery: function(tableName, attributes) {
var query = [ var query = 'ALTER TABLE <%= tableName %> ALTER COLUMN <%= attributes %>;';
SqlGenerator.alterTableSql(tableName), var attrString = [];
SqlGenerator.alterColumnSql(),
SqlGenerator.alterAttributesSql(attributes)
].join(' ') + ';';
return query; for (var attrName in attributes) {
var definition = attributes[attrName];
attrString.push(Utils._.template('<%= attrName %> <%= definition %>')({
attrName: this.quoteIdentifier(attrName),
definition: definition
}));
}
return Utils._.template(query)({
tableName: this.quoteTable(tableName),
attributes: attrString.join(', ') });
}, },
renameColumnQuery: function(tableName, attrBefore, attributes) { renameColumnQuery: function(tableName, attrBefore, attributes) {
...@@ -188,19 +202,44 @@ module.exports = (function() { ...@@ -188,19 +202,44 @@ module.exports = (function() {
}; };
var generatedQuery = Utils._.template(allQueries.join(';'))(replacements); var generatedQuery = Utils._.template(allQueries.join(';'))(replacements);
if (needIdentityInsertWrapper) if (needIdentityInsertWrapper) {
return SqlGenerator.identityInsertWrapper(generatedQuery, tableName); generatedQuery = [
'SET IDENTITY_INSERT', this.quoteTable(tableName), 'ON;',
generatedQuery,
'SET IDENTITY_INSERT', this.quoteTable(tableName), 'OFF;',
].join(' ');
}
return generatedQuery; return generatedQuery;
}, },
deleteQuery: function(tableName, where, options) { deleteQuery: function(tableName, where, options) {
var query = [ options = options || {};
SqlGenerator.deleteSql(tableName),
"WHERE",
this.getWhereConditions(where),
";SELECT @@ROWCOUNT AS AFFECTEDROWS;"].join(' ');
return query; var table = this.quoteTable(tableName);
if (options.truncate === true) {
// Truncate does not allow LIMIT and WHERE
return 'TRUNCATE ' + table;
}
where = this.getWhereConditions(where);
var limit = ''
, query = 'DELETE<%= limit %> FROM <%= table %> WHERE <%= where %>; ' +
'SELECT @@ROWCOUNT AS AFFECTEDROWS;';
if (Utils._.isUndefined(options.limit)) {
options.limit = 1;
}
if (!!options.limit) {
limit = ' TOP(' + this.escape(options.limit) + ')';
}
return Utils._.template(query)({
limit: limit,
table: table,
where: where,
});
}, },
showIndexQuery: function(tableName, options) { showIndexQuery: function(tableName, options) {
...@@ -228,6 +267,10 @@ module.exports = (function() { ...@@ -228,6 +267,10 @@ module.exports = (function() {
return Utils._.template(sql)(values); return Utils._.template(sql)(values);
}, },
attributeToSQL: function(attribute, options) {
return SqlGenerator.attributeToSQL(attribute, options);
},
attributesToSQL: function(attributes, options) { attributesToSQL: function(attributes, options) {
var result = {} var result = {}
, key , key
...@@ -331,10 +374,10 @@ module.exports = (function() { ...@@ -331,10 +374,10 @@ module.exports = (function() {
}, },
dropForeignKeyQuery: function(tableName, foreignKey) { dropForeignKeyQuery: function(tableName, foreignKey) {
return [ return Utils._.template('ALTER TABLE <%= table %> DROP <%= key %>')({
SqlGenerator.alterTableSql(tableName), table: this.quoteTable(tableName),
SqlGenerator.dropSql(foreignKey) key: this.quoteIdentifier(foreignKey)
].join(' ') + ';'; });
}, },
setAutocommitQuery: function(value) { setAutocommitQuery: function(value) {
......
...@@ -116,45 +116,6 @@ module.exports = { ...@@ -116,45 +116,6 @@ module.exports = {
return table; return table;
}, },
identityInsertWrapper: function(query, table){
return[
'SET IDENTITY_INSERT', quoteIdentifier(table), 'ON;',
query,
'SET IDENTITY_INSERT', quoteIdentifier(table), 'OFF;',
].join(' ');
},
alterTableSql: function(tableName){
var query = 'ALTER TABLE <%= tableName %>';
var value = {
tableName : quoteIdentifier(tableName)
};
return Utils._.template(query)(value);
},
deleteSql: function(tableName) {
var query = "DELETE FROM <%= table %>";
var replacements = {
table: quoteIdentifier(tableName.toString())
};
return Utils._.template(query)(replacements);
},
addColumnSql: function(key, dataType){
var attribute = Utils._.template('<%= key %> <%= definition %>')({
key: quoteIdentifier(key),
definition: this.attributeToSQL(dataType, {
context: 'addColumn'
})
});
return 'ADD ' + attribute;
},
alterColumnSql: function(){
return 'ALTER COLUMN';
},
renameColumnSql: function(tableName, attrBefore, newColumnName){ renameColumnSql: function(tableName, attrBefore, newColumnName){
var query = 'EXEC SP_RENAME \'<%= tableName %>.<%= before %>\', \'<%= after %>\';'; var query = 'EXEC SP_RENAME \'<%= tableName %>.<%= before %>\', \'<%= after %>\';';
var attrString = []; var attrString = [];
...@@ -256,26 +217,6 @@ module.exports = { ...@@ -256,26 +217,6 @@ module.exports = {
} }
return template.join(' '); return template.join(' ');
}, }
dropSql: function(val){
return [
'DROP',
quoteIdentifier(val)
].join(' ');
},
alterAttributesSql: function(attributes){
var attrString = [];
for (var attrName in attributes) {
var definition = attributes[attrName];
attrString.push(Utils._.template('"<%= attrName %>" <%= definition %>')({
attrName: attrName,
definition: definition
}));
}
return attrString.join(', ');
},
}; };
...@@ -1480,8 +1480,8 @@ describe(Support.getTestDialectTeaser("Instance"), function () { ...@@ -1480,8 +1480,8 @@ describe(Support.getTestDialectTeaser("Instance"), function () {
} }
else if (Support.dialectIsMySQL()) { else if (Support.dialectIsMySQL()) {
expect(sql).to.equal("DELETE FROM `UserDestroys` WHERE `newId`='123ABC' LIMIT 1") expect(sql).to.equal("DELETE FROM `UserDestroys` WHERE `newId`='123ABC' LIMIT 1")
} else if(dialect === 'mssql'){ } else if (dialect === 'mssql') {
expect(sql).to.equal('DELETE FROM "UserDestroys" WHERE "newId"=\'123ABC\' ;SELECT @@ROWCOUNT AS AFFECTEDROWS;') expect(sql).to.equal('DELETE TOP(1) FROM "UserDestroys" WHERE "newId"=\'123ABC\'; SELECT @@ROWCOUNT AS AFFECTEDROWS;')
}else { }else {
expect(sql).to.equal("DELETE FROM `UserDestroys` WHERE `newId`='123ABC'") expect(sql).to.equal("DELETE FROM `UserDestroys` WHERE `newId`='123ABC'")
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!