Use the columnEscaped for names

This commit is contained in:
Raymond Feng 2013-10-14 14:32:19 -07:00
parent f7a410775f
commit 2ce81681d6
1 changed files with 40 additions and 11 deletions

View File

@ -176,7 +176,7 @@ MySQL.prototype.updateOrCreate = function (model, data, callback) {
var props = this._models[model].properties;
Object.keys(data).forEach(function (key) {
if (props[key] || mysql.id(model, key)) {
var k = '`' + key + '`';
var k = mysql.columnEscaped(model, key);
var v;
if (!mysql.id(model, key)) {
v = mysql.toDatabase(props[key], data[key]);
@ -203,13 +203,14 @@ MySQL.prototype.updateOrCreate = function (model, data, callback) {
};
MySQL.prototype.toFields = function (model, data) {
var self = this;
var fields = [];
var props = this._models[model].properties;
Object.keys(data).forEach(function (key) {
if (props[key]) {
var value = this.toDatabase(props[key], data[key]);
if ('undefined' === typeof value) return;
fields.push('`' + key.replace(/\./g, '`.`') + '` = ' + value);
fields.push(self.columnEscaped(model, key) + ' = ' + value);
}
}.bind(this));
return fields.join(',');
@ -353,7 +354,7 @@ function buildWhere(self, model, conds) {
var cs = [];
Object.keys(conds).forEach(function (key) {
var keyEscaped = '`' + key.replace(/\./g, '`.`') + '`';
var keyEscaped = self.columnEscaped(model, key);
var val = self.toDatabase(props[key], conds[key]);
if (conds[key] === null || conds[key] === undefined) {
cs.push(keyEscaped + ' IS NULL');
@ -402,14 +403,16 @@ function buildWhere(self, model, conds) {
return 'WHERE ' + cs.join(' AND ');
}
function buildOrderBy(order) {
function buildOrderBy(self, model, order) {
if (typeof order === 'string') {
order = [order];
}
return 'ORDER BY ' + order.map(function(o) {
var t = o.split(/[\s,]+/);
if (t.length === 1) return '`' + o + '`';
return '`' + t[0] + '` ' + t[1];
if (t.length === 1) {
return self.columnEscaped(model, o);
}
return self.columnEscaped(model, t[0]) + ' ' + t[1];
}).join(', ');
}
@ -444,7 +447,7 @@ MySQL.prototype.all = function all(model, filter, callback) {
}
if (filter.order) {
sql += ' ' + buildOrderBy(filter.order);
sql += ' ' + buildOrderBy(self, model, filter.order);
}
if (filter.limit) {
@ -742,11 +745,35 @@ MySQL.prototype.alterTable = function (model, actualFields, actualIndexes, done,
MySQL.prototype.propertiesSQL = function (model) {
var self = this;
var pks = this.idNames(model).map(function (i) {
return self.columnEscaped(model, i);
});
var sql = [];
if (pks.length === 1) {
var idName = this.idName(model);
sql.push(self.columnEscaped(model, idName) + ' INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY');
}
Object.keys(this._models[model].properties).forEach(function (prop) {
if (self.id(model, prop) && pks.length === 1) {
return;
}
var colName = self.columnEscaped(model, prop);
sql.push(colName + ' ' + self.propertySettingsSQL(model, prop));
});
if (pks.length > 1) {
sql.push('PRIMARY KEY(' + pks.join(',') + ')');
}
/*
var sql = ['`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY'];
Object.keys(this._models[model].properties).forEach(function (prop) {
if (self.id(model, prop)) return;
sql.push('`' + prop + '` ' + self.propertySettingsSQL(model, prop));
});
*/
// Declared in model index property indexes.
Object.keys(this._models[model].properties).forEach(function (prop) {
var i = self._models[model].properties[prop].index;
@ -775,10 +802,11 @@ MySQL.prototype.singleIndexSettingsSQL = function (model, prop) {
if (i.kind) {
kind = i.kind;
}
var columnName = this.columnEscaped(model, prop);
if (kind && type) {
return (kind + ' INDEX `' + prop + '` (`' + prop + '`) ' + type);
return (kind + ' INDEX ' + columnName + ' (' + columnName + ') ' + type);
} else {
return (kind + ' INDEX `' + prop + '` ' + type + ' (`' + prop + '`) ');
return (kind + ' INDEX ' + columnName + ' ' + type + ' (' + columnName + ') ');
}
};
@ -793,10 +821,11 @@ MySQL.prototype.indexSettingsSQL = function (model, prop) {
if (i.kind) {
kind = i.kind;
}
var columnName = this.columnEscaped(model, prop);
if (kind && type) {
return (kind + ' INDEX `' + prop + '` (' + i.columns + ') ' + type);
return (kind + ' INDEX ' + columnName + ' (' + i.columns + ') ' + type);
} else {
return (kind + ' INDEX ' + type + ' `' + prop + '` (' + i.columns + ')');
return (kind + ' INDEX ' + type + ' ' + columnName + ' (' + i.columns + ')');
}
};