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;
|
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 + ')');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue