Use the columnEscaped for names
This commit is contained in:
parent
f7a410775f
commit
2ce81681d6
51
lib/mysql.js
51
lib/mysql.js
|
@ -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 + ')');
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue