newsql
Version:
Get the best of both worlds
54 lines (47 loc) • 1.05 kB
JavaScript
/*!
* newsql
* authors: Ben Lue
* license: GPL 2.0
* Copyright(c) 2015 Gocharm Inc.
*/
var _noArgOP = ['IS NOT NULL', 'IS NULL'];
exports.parseQO = function parseQO(input, query, op) {
if (Object.keys(input).length === 0)
return null;
var filters = [];
op = op || 'and';
for (var key in input) {
if (key === 'or' || key === 'and') {
var f = parseQO(input[key], query, key);
if (f)
filters.push(f);
}
else if (typeof input[key] === 'object') {
var f,
kv = input[key];
if (kv.op) {
if (_noArgOP.indexOf(kv.op) >= 0) {
f = {name: key, op: kv.op};
query[key] = true;
}
else if (kv.hasOwnProperty('value')) {
f = {name: key, op: kv.op};
query[key] = kv.value;
}
if (f)
filters.push( f );
}
else {
filters.push( {name: key, op: '='} );
query[key] = kv;
}
}
else {
filters.push( {name: key, op: '='} );
query[key] = input[key];
}
}
if (filters.length > 1)
return {op: op, filters: filters};
return filters[0];
};