query-generator.js
1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
'use strict';
var Utils = require('../../utils');
module.exports = (function() {
var QueryGenerator = {
dialect: 'mssql',
quoteIdentifier: function(identifier, force) {
if (identifier === '*') return identifier;
return Utils.addTicks(identifier, '"');
},
showTablesQuery: function () {
return 'SELECT * FROM sys.Tables';
},
dropTableQuery: function(tableName, options) {
options = options || {};
var query = "IF OBJECT_ID('dbo.<%= tableName %>', 'U') IS NOT NULL DROP TABLE dbo.<%= tableName %>";
return Utils._.template(query)({
tableName: tableName
});
},
createTableQuery: function(tableName, attributes, options) {
var query = "IF OBJECT_ID('<%= unquotedTable %>', N'U') IS NULL CREATE TABLE <%= table %> (<%= attributes%>)"
, attrStr = []
, self = this
, primaryKeys = Utils._.keys(Utils._.pick(attributes, function(dataType){
return dataType.indexOf('PRIMARY KEY') >= 0;
}));
for (var attr in attributes) {
if (attributes.hasOwnProperty(attr)) {
var dataType = attributes[attr];
if (primaryKeys.length > 1){
dataType = dataType.replace(/ PRIMARY KEY/, '');
}
attrStr.push(self.quote(attr) + " " + dataType);
}
}
if (primaryKeys.length > 1) {
attrStr.push('PRIMARY KEY(' + primaryKeys.map(function(column){
return self.quote(column);
}).join(', ') + ')');
}
var values = {
unquotedTable: tableName,
table: self.quote(tableName),
attributes: attrStr.join(", ")
};
return Utils._.template(query)(values).trim() + ";";
}
};
return Utils._.extend(Utils._.clone(require('../mysql/query-generator')), QueryGenerator);
})();