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