relax-orm
Version:
ORM for OracleDB
53 lines • 1.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var operator_type_1 = require("../enum/operator.type");
var in_parser_1 = require("./in.parser");
function parseWhere(whereOptions, cols, binds, op) {
var keys = Object.keys(cols.columsInfo);
var res = '';
var rootOperators = Object.getOwnPropertySymbols(whereOptions);
rootOperators.forEach(function (op) {
res += " " + parseWhereArray(whereOptions[op], cols, binds, op) + " AND";
});
keys.forEach(function (k) {
var val = whereOptions[k];
if (!val) {
return;
}
var valType = typeof val;
var bindKey = k + "$";
if (valType === 'string' || valType === 'number' || val instanceof Date) {
res += " " + cols.columsInfo[k].column + " = :" + bindKey + " AND";
binds[bindKey] = val;
return;
}
var op = Object.getOwnPropertySymbols(val)[0];
switch (op) {
case operator_type_1.Op.in:
res += " " + in_parser_1.parseIn(val[op], k, cols.columsInfo[k].column, binds) + " AND";
break;
default:
break;
}
});
res = res.slice(0, -4);
if (op === operator_type_1.Op.and || op === operator_type_1.Op.or) {
return res;
}
return res !== '' ? " WHERE" + res : '';
}
exports.parseWhere = parseWhere;
function parseWhereArray(whereOptionsArr, cols, binds, op) {
var res = '';
var lastOperator = '';
if (!Array.isArray(whereOptionsArr)) {
throw new TypeError("op: have to be Array of whereOptions");
}
whereOptionsArr.forEach(function (options) {
res += "(" + parseWhere(options, cols, binds, op) + " )";
lastOperator = op === operator_type_1.Op.or ? ' OR ' : ' AND ';
res += lastOperator;
});
return res.slice(0, -(lastOperator.length));
}
//# sourceMappingURL=where.parser.js.map