UNPKG

relax-orm

Version:
53 lines 1.95 kB
"use strict"; 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