Merge pull request #27 from strongloop/feature/logical-operator
Feature/logical operator
This commit is contained in:
commit
a3ffac0a55
25
lib/mysql.js
25
lib/mysql.js
|
@ -388,11 +388,27 @@ MySQL.prototype.getColumns = function (model, props) {
|
|||
return names.join(', ');
|
||||
};
|
||||
|
||||
function buildWhere(self, model, conds) {
|
||||
MySQL.prototype.buildWhere = function (model, conds) {
|
||||
var where = this._buildWhere(model, conds);
|
||||
return where? 'WHERE ' + where : '';
|
||||
};
|
||||
|
||||
MySQL.prototype._buildWhere = function (model, conds) {
|
||||
var self = this;
|
||||
var props = self._models[model].properties;
|
||||
|
||||
var cs = [];
|
||||
Object.keys(conds).forEach(function (key) {
|
||||
if (key === 'and' || key === 'or') {
|
||||
var clauses = conds[key];
|
||||
if (Array.isArray(clauses)) {
|
||||
clauses = clauses.map(function (c) {
|
||||
return '(' + self._buildWhere(model, c) + ')';
|
||||
});
|
||||
return cs.push(clauses.join(' ' + key.toUpperCase() + ' '));
|
||||
}
|
||||
// The value is not an array, fall back to regular fields
|
||||
}
|
||||
var keyEscaped = self.columnEscaped(model, key);
|
||||
var val = self.toDatabase(props[key], conds[key]);
|
||||
if (conds[key] === null || conds[key] === undefined) {
|
||||
|
@ -439,7 +455,7 @@ function buildWhere(self, model, conds) {
|
|||
if (cs.length === 0) {
|
||||
return '';
|
||||
}
|
||||
return 'WHERE ' + cs.join(' AND ');
|
||||
return cs.join(' AND ');
|
||||
}
|
||||
|
||||
function buildOrderBy(self, model, order) {
|
||||
|
@ -482,7 +498,7 @@ MySQL.prototype.all = function all(model, filter, callback) {
|
|||
if (filter) {
|
||||
|
||||
if (filter.where) {
|
||||
sql += ' ' + buildWhere(self, model, filter.where);
|
||||
sql += ' ' + self.buildWhere(model, filter.where);
|
||||
}
|
||||
|
||||
if (filter.order) {
|
||||
|
@ -528,7 +544,8 @@ MySQL.prototype.destroyAll = function destroyAll(model, where, callback) {
|
|||
where = undefined;
|
||||
}
|
||||
this.query('DELETE FROM '
|
||||
+ this.tableEscaped(model) + ' ' + buildWhere(this, model, where || {}), function (err, data) {
|
||||
+ this.tableEscaped(model) + ' ' + this.buildWhere(model, where || {}),
|
||||
function (err, data) {
|
||||
callback && callback(err, data);
|
||||
}.bind(this));
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue