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

Commit ff7794d3 by Sascha Depold

added helper in utils for client.escape + added extended data types

1 parent 3a463042
...@@ -8,7 +8,7 @@ var ModelDefinition = module.exports = function(name, attributes, options) { ...@@ -8,7 +8,7 @@ var ModelDefinition = module.exports = function(name, attributes, options) {
this.options = options || {} this.options = options || {}
this.name = name this.name = name
this.tableName = name this.tableName = name
this.attributes = attributes this.attributes = Utils.simplifyAttributes(attributes)
this.modelManager = null // defined by model-manager during addModel this.modelManager = null // defined by model-manager during addModel
// additional attributes // additional attributes
......
var Utils = require("./utils") var Utils = require("./utils")
, client = new (require("mysql").Client)()
var QueryGenerator = module.exports = { var QueryGenerator = module.exports = {
/* /*
...@@ -74,7 +73,7 @@ var QueryGenerator = module.exports = { ...@@ -74,7 +73,7 @@ var QueryGenerator = module.exports = {
table: Utils.addTicks(tableName), table: Utils.addTicks(tableName),
attributes: Utils._.keys(attrValueHash).map(function(attr){return Utils.addTicks(attr)}).join(","), attributes: Utils._.keys(attrValueHash).map(function(attr){return Utils.addTicks(attr)}).join(","),
values: Utils._.values(attrValueHash).map(function(value){ values: Utils._.values(attrValueHash).map(function(value){
return client.escape((value instanceof Date) ? Utils.toSqlDate(value) : value) return Utils.escape((value instanceof Date) ? Utils.toSqlDate(value) : value)
}).join(",") }).join(",")
} }
...@@ -96,7 +95,7 @@ var QueryGenerator = module.exports = { ...@@ -96,7 +95,7 @@ var QueryGenerator = module.exports = {
var replacements = { var replacements = {
table: Utils.addTicks(tableName), table: Utils.addTicks(tableName),
values: Utils._.map(values, function(value, key){ values: Utils._.map(values, function(value, key){
return Utils.addTicks(key) + "=" + client.escape((value instanceof Date) ? Utils.toSqlDate(value) : value) return Utils.addTicks(key) + "=" + Utils.escape((value instanceof Date) ? Utils.toSqlDate(value) : value)
}).join(","), }).join(","),
where: QueryGenerator.getWhereConditions(where) where: QueryGenerator.getWhereConditions(where)
} }
...@@ -123,7 +122,7 @@ var QueryGenerator = module.exports = { ...@@ -123,7 +122,7 @@ var QueryGenerator = module.exports = {
var replacements = { var replacements = {
table: Utils.addTicks(tableName), table: Utils.addTicks(tableName),
where: QueryGenerator.getWhereConditions(where), where: QueryGenerator.getWhereConditions(where),
limit: client.escape(options.limit) limit: Utils.escape(options.limit)
} }
return Utils._.template(query)(replacements) return Utils._.template(query)(replacements)
...@@ -138,7 +137,7 @@ var QueryGenerator = module.exports = { ...@@ -138,7 +137,7 @@ var QueryGenerator = module.exports = {
if(Utils.isHash(smth)) if(Utils.isHash(smth))
result = QueryGenerator.hashToWhereConditions(smth) result = QueryGenerator.hashToWhereConditions(smth)
else if(typeof smth == 'number') else if(typeof smth == 'number')
result = Utils.addTicks('id') + "=" + client.escape(smth) result = Utils.addTicks('id') + "=" + Utils.escape(smth)
else if(typeof smth == "string") else if(typeof smth == "string")
result = smth result = smth
...@@ -151,7 +150,7 @@ var QueryGenerator = module.exports = { ...@@ -151,7 +150,7 @@ var QueryGenerator = module.exports = {
*/ */
hashToWhereConditions: function(hash) { hashToWhereConditions: function(hash) {
return Utils._.map(hash, function(value, key) { return Utils._.map(hash, function(value, key) {
var _value = client.escape(value) var _value = Utils.escape(value)
, _key = Utils.addTicks(key) , _key = Utils.addTicks(key)
return (_value == 'NULL') ? _key + " IS NULL" : [_key, _value].join("=") return (_value == 'NULL') ? _key + " IS NULL" : [_key, _value].join("=")
......
var client = new (require("mysql").Client)()
var Utils = module.exports = { var Utils = module.exports = {
_: require("underscore"), _: require("underscore"),
addEventEmitter: function(_class) { addEventEmitter: function(_class) {
...@@ -9,6 +10,9 @@ var Utils = module.exports = { ...@@ -9,6 +10,9 @@ var Utils = module.exports = {
removeTicks: function(s) { removeTicks: function(s) {
return s.replace("`", "") return s.replace("`", "")
}, },
escape: function(s) {
return client.escape(s)
},
isHash: function(obj) { isHash: function(obj) {
return (typeof obj == 'object') && !obj.hasOwnProperty('length') return (typeof obj == 'object') && !obj.hasOwnProperty('length')
}, },
...@@ -52,6 +56,28 @@ var Utils = module.exports = { ...@@ -52,6 +56,28 @@ var Utils = module.exports = {
return ("'" + value + "'") return ("'" + value + "'")
}, },
simplifyAttributes: function(attributes) {
var result = {}
Utils._.map(attributes, function(dataType, name) {
if(Utils.isHash(dataType)) {
var template = "<%= type %>"
, replacements = { type: dataType.type }
if(dataType.default) {
template += " DEFAULT <%= defaultValue %>"
replacements.defaultValue = Utils.escape(dataType.default)
}
if(dataType.unique) template += " UNIQUE"
result[name] = Utils._.template(template)(replacements)
} else {
result[name] = dataType
}
})
return result
},
toSqlDate: function(date) { toSqlDate: function(date) {
return [ return [
[ [
......
...@@ -7,5 +7,19 @@ module.exports = { ...@@ -7,5 +7,19 @@ module.exports = {
assert.eql(s.modelManager.all.length, 0) assert.eql(s.modelManager.all.length, 0)
s.define('foo', { title: Sequelize.STRING }) s.define('foo', { title: Sequelize.STRING })
assert.eql(s.modelManager.all.length, 1) assert.eql(s.modelManager.all.length, 1)
},
'it should handle extended attributes': function() {
var s = new Sequelize('database', 'username', 'password')
var User = s.define('User', {
name: Sequelize.STRING,
username: {type: Sequelize.STRING, unique: true},
password: {type: Sequelize.STRING, default: 'password'}
})
assert.eql(User.attributes, {
name:"VARCHAR(255)",
username:"VARCHAR(255) UNIQUE",
password:"VARCHAR(255) DEFAULT 'password'",
id:"INT NOT NULL auto_increment PRIMARY KEY"
})
} }
} }
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!