UNPKG

tspace-sql

Version:

mysql & postgresql query builder object relational mapping

995 lines (994 loc) 74.5 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var AbstractBase_1 = __importDefault(require("./AbstractBase")); var Base = /** @class */ (function (_super) { __extends(Base, _super); function Base() { var _this = _super !== null && _super.apply(this, arguments) || this; _this._insertNotExists = function () { return __awaiter(_this, void 0, void 0, function () { var sql, check, result, result, _a, _b, result, id, sql_1, data; return __generator(this, function (_c) { switch (_c.label) { case 0: if (!this.WHERE) throw new Error("Can't insert not exists without where condition"); sql = ''; check = false; if (!(this.DIALECT === this.CONSTANT.POSTGRESQL)) return [3 /*break*/, 2]; sql = this.CONSTANT.SELECT + " " + this.CONSTANT.COUNT + "(*) " + this.CONSTANT.AS + " exists " + this.FROM + " " + this.TABLE_NAME + " " + this.WHERE + " " + this.CONSTANT.LIMIT + " 1"; return [4 /*yield*/, this.queryStatement(sql)]; case 1: result = (_c.sent())[0].exists; check = !!parseInt(result); return [3 /*break*/, 4]; case 2: sql = this.CONSTANT.SELECT + " " + this.CONSTANT.EXISTS + "(" + this.CONSTANT.SELECT + " * " + this.FROM + " " + this.TABLE_NAME + " " + this.WHERE + " " + this.CONSTANT.LIMIT + " 1) " + this.CONSTANT.AS + " 'exists'"; return [4 /*yield*/, this.queryStatement(sql)]; case 3: result = (_c.sent())[0].exists; check = !!parseInt(result); _c.label = 4; case 4: _a = check; switch (_a) { case false: return [3 /*break*/, 5]; case true: return [3 /*break*/, 9]; } return [3 /*break*/, 10]; case 5: return [4 /*yield*/, this.actionStatement({ sql: this.INSERT, returnId: true })]; case 6: _b = _c.sent(), result = _b[0], id = _b[1]; if (this.TRANSACTION) { this.TRANSACTION.query.push({ table: this.TABLE_NAME, id: id }); } if (!result) return [3 /*break*/, 8]; sql_1 = this.SELECT + " " + this.FROM + " " + this.TABLE_NAME + " " + this.CONSTANT.WHERE + " id = " + id; return [4 /*yield*/, this.queryStatement(sql_1)]; case 7: data = _c.sent(); return [2 /*return*/, data.shift() || null]; case 8: return [2 /*return*/, null]; case 9: { return [2 /*return*/, null]; } _c.label = 10; case 10: { return [2 /*return*/, null]; } _c.label = 11; case 11: return [2 /*return*/]; } }); }); }; _this._create = function () { return __awaiter(_this, void 0, void 0, function () { var _a, result, id, sql, data, result_1, err_1; return __generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 4, , 5]); return [4 /*yield*/, this.actionStatement({ sql: this.INSERT, returnId: true })]; case 1: _a = _b.sent(), result = _a[0], id = _a[1]; if (this.TRANSACTION) { this.TRANSACTION.query.push({ table: this.TABLE_NAME, id: id }); } if (!result) return [3 /*break*/, 3]; sql = this.SELECT + " " + this.FROM + " " + this.TABLE_NAME + " " + this.CONSTANT.WHERE + " id = " + id; return [4 /*yield*/, this.queryStatement(sql)]; case 2: data = _b.sent(); result_1 = data.shift() || null; this.RESULT = result_1; return [2 /*return*/, result_1]; case 3: return [2 /*return*/, null]; case 4: err_1 = _b.sent(); throw new Error(err_1.message); case 5: return [2 /*return*/]; } }); }); }; _this._createMultiple = function () { return __awaiter(_this, void 0, void 0, function () { var _a, result, id_1, arrayId, _i, arrayId_1, id_2, sql, data, resultData, err_2; return __generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 4, , 5]); return [4 /*yield*/, this.actionStatement({ sql: this.INSERT, returnId: true })]; case 1: _a = _b.sent(), result = _a[0], id_1 = _a[1]; if (!result) return [3 /*break*/, 3]; arrayId = __spreadArray([], Array(result), true).map(function (_, i) { return i + id_1; }); for (_i = 0, arrayId_1 = arrayId; _i < arrayId_1.length; _i++) { id_2 = arrayId_1[_i]; if (this.TRANSACTION) { this.TRANSACTION.query.push({ table: this.TABLE_NAME, id: id_2 }); } } sql = this.SELECT + " " + this.FROM + " " + this.TABLE_NAME + " " + this.CONSTANT.WHERE + " id " + this.CONSTANT.IN + " (" + arrayId + ")"; return [4 /*yield*/, this.queryStatement(sql)]; case 2: data = _b.sent(); resultData = data || null; this.RESULT = resultData; return [2 /*return*/, resultData]; case 3: return [2 /*return*/, null]; case 4: err_2 = _b.sent(); throw new Error(err_2.message); case 5: return [2 /*return*/]; } }); }); }; _this._updateOrInsert = function () { return __awaiter(_this, void 0, void 0, function () { var sql, check, result, result, _a, _b, result, id, sql_2, data, resultData, result, data, _i, data_1, val; return __generator(this, function (_c) { switch (_c.label) { case 0: if (!this.WHERE) throw new Error("Can't update or insert without where condition"); sql = ''; check = false; if (!(this.DIALECT === this.CONSTANT.POSTGRESQL)) return [3 /*break*/, 2]; sql = this.CONSTANT.SELECT + " " + this.CONSTANT.COUNT + "(*) " + this.CONSTANT.AS + " exists " + this.FROM + " " + this.TABLE_NAME + " " + this.WHERE + " " + this.CONSTANT.LIMIT + " 1"; return [4 /*yield*/, this.queryStatement(sql)]; case 1: result = (_c.sent())[0].exists; check = !!parseInt(result); return [3 /*break*/, 4]; case 2: sql = this.CONSTANT.SELECT + " " + this.CONSTANT.EXISTS + "(" + this.CONSTANT.SELECT + " * " + this.FROM + " " + this.TABLE_NAME + " " + this.WHERE + " " + this.CONSTANT.LIMIT + " 1) " + this.CONSTANT.AS + " 'exists'"; return [4 /*yield*/, this.queryStatement(sql)]; case 3: result = (_c.sent())[0].exists; check = !!parseInt(result); _c.label = 4; case 4: _a = check; switch (_a) { case false: return [3 /*break*/, 5]; case true: return [3 /*break*/, 9]; } return [3 /*break*/, 13]; case 5: return [4 /*yield*/, this.actionStatement({ sql: this.INSERT, returnId: true })]; case 6: _b = _c.sent(), result = _b[0], id = _b[1]; if (this.TRANSACTION) { this.TRANSACTION.query.push({ table: this.TABLE_NAME, id: id }); } if (!result) return [3 /*break*/, 8]; sql_2 = this.SELECT + " " + this.FROM + " " + this.TABLE_NAME + " " + this.CONSTANT.WHERE + " id = " + id; return [4 /*yield*/, this.queryStatement(sql_2)]; case 7: data = _c.sent(); resultData = __assign(__assign({}, data.shift()), { action_status: 'insert' }) || null; this.RESULT = resultData; return [2 /*return*/, resultData]; case 8: return [2 /*return*/, null]; case 9: return [4 /*yield*/, this.actionStatement({ sql: this.UPDATE + " " + this.WHERE })]; case 10: result = _c.sent(); if (!result) return [3 /*break*/, 12]; return [4 /*yield*/, this.queryStatement(this.SELECT + " " + this.FROM + " " + this.TABLE_NAME + " " + this.WHERE)]; case 11: data = _c.sent(); if ((data === null || data === void 0 ? void 0 : data.length) > 1) { for (_i = 0, data_1 = data; _i < data_1.length; _i++) { val = data_1[_i]; val.action_status = 'update'; } return [2 /*return*/, data || []]; } return [2 /*return*/, __assign(__assign({}, data.shift()), { action_status: 'update' }) || null]; case 12: return [2 /*return*/, null]; case 13: { return [2 /*return*/, null]; } _c.label = 14; case 14: return [2 /*return*/]; } }); }); }; _this._update = function () { return __awaiter(_this, void 0, void 0, function () { var result, data, err_3; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 4, , 5]); if (!this.WHERE) throw new Error("Can't update without where condition"); return [4 /*yield*/, this.actionStatement({ sql: this.UPDATE + " " + this.WHERE })]; case 1: result = _a.sent(); if (!result) return [3 /*break*/, 3]; return [4 /*yield*/, this.queryStatement(this.SELECT + " " + this.FROM + " " + this.TABLE_NAME + " " + this.WHERE)]; case 2: data = _a.sent(); if ((data === null || data === void 0 ? void 0 : data.length) > 1) return [2 /*return*/, data || []]; return [2 /*return*/, data.shift() || null]; case 3: return [2 /*return*/, null]; case 4: err_3 = _a.sent(); throw new Error(err_3.message); case 5: return [2 /*return*/]; } }); }); }; _this._hiddenColumn = function (object) { var hidden = _this.HIDDEN; if (Object.keys(object).length) { hidden.forEach(function (column) { object.forEach(function (objColumn) { delete objColumn[column]; }); }); } return object; }; _this._queryInsert = function (objects) { var _a, _b; if (_this.TIMESTAMP) { var createdAt = _this._isSnakeCase() ? 'created_at' : 'createdAt'; var updatedAt = _this._isSnakeCase() ? 'updated_at' : 'updatedAt'; objects = __assign(__assign({}, objects), (_a = {}, _a[createdAt] = _this.HELPER.timestamp(), _a[updatedAt] = _this.HELPER.timestamp(), _a)); } if (_this.UUID) objects = __assign(__assign({}, objects), (_b = {}, _b[_this.UUID_CUSTOM] = _this.HELPER.generateUUID(), _b)); var columns = Object.keys(objects).map(function (data) { return "" + data; }); var values = Object.values(objects).map(function (data) { return "" + (data == null || data === 'NULL' ? 'NULL' : "'" + _this._covertBooleanToNumber(data) + "'"); }); return "(" + columns + ") " + _this.CONSTANT.VALUES + " (" + values + ")"; }; _this._queryInsertMultiple = function (data) { var _a; var _b; var values = []; for (var _i = 0, data_2 = data; _i < data_2.length; _i++) { var objects = data_2[_i]; if (_this.TIMESTAMP) { var createdAt = _this._isSnakeCase() ? 'created_at' : 'createdAt'; var updatedAt = _this._isSnakeCase() ? 'updated_at' : 'updatedAt'; objects[createdAt] = _this.HELPER.timestamp(); objects[updatedAt] = _this.HELPER.timestamp(); } if (_this.UUID) objects = __assign(__assign({}, objects), (_a = {}, _a[_this.UUID_CUSTOM] = _this.HELPER.generateUUID(), _a)); var val = Object.values(objects).map(function (data) { return "" + (data == null || data === 'NULL' ? 'NULL' : "'" + _this._covertBooleanToNumber(data) + "'"); }); values.push("(" + val.join(',') + ")"); } var columns = Object.keys((_b = data[0]) !== null && _b !== void 0 ? _b : []).map(function (data) { return "" + data; }); return "(" + columns + ") " + _this.CONSTANT.VALUES + " " + values.join(','); }; _this._valueAndOperator = function (value, operator, useDefault) { if (useDefault === void 0) { useDefault = false; } if (useDefault) { return [operator, '=']; } if (operator === _this.CONSTANT.LIKE) operator = operator.toUpperCase(); return [value, operator]; }; _this._valueTrueFalse = function (value) { if (value === true) return 1; if (value === false) return 0; return value; }; _this._getSQL = function () { var arraySql; if (_this.INSERT) { arraySql = [ _this.INSERT, ]; } else if (_this.UPDATE) { arraySql = [ _this.UPDATE, _this.WHERE, ]; } else if (_this.DELETE) { arraySql = [ _this.DELETE ]; } else { arraySql = [ _this.SELECT, _this.FROM, _this.TABLE_NAME, _this.JOIN, _this.WHERE, _this.GROUP_BY, _this.HAVING, _this.ORDER_BY, _this.LIMIT ]; } var filterSql = arraySql.filter(function (data) { return data !== ''; }); var sql = filterSql.join(' '); return sql; }; return _this; } Base.prototype.pluck = function (column) { this.PLUCK = column; return this; }; Base.prototype.select = function () { var params = []; for (var _i = 0; _i < arguments.length; _i++) { params[_i] = arguments[_i]; } var select = '*'; if (params.length) select = params.join(','); this.SELECT = this.CONSTANT.SELECT + " " + select; return this; }; Base.prototype.whereNull = function (column) { if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + this.CONSTANT.IS_NULL; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + this.CONSTANT.IS_NULL; return this; }; Base.prototype.whereNotNull = function (column) { if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + this.CONSTANT.IS_NOT_NULL; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + this.CONSTANT.IS_NOT_NULL; return this; }; Base.prototype.whereSensitive = function (column, operator, value) { var _a; _a = this._valueAndOperator(value, operator, arguments.length === 2), value = _a[0], operator = _a[1]; value = this.HELPER.escape(value); value = this._valueTrueFalse(value); if (operator === this.CONSTANT.LIKE) value = "%" + value + "%"; if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " BINARY " + column + " " + operator + " '" + value + "'"; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " BINARY " + column + " " + operator + " '" + value + "'"; return this; }; Base.prototype.whereGroupStart = function (column, operator, value) { var _a; _a = this._valueAndOperator(value, operator, arguments.length === 2), value = _a[0], operator = _a[1]; value = this.HELPER.escape(value); value = this._valueTrueFalse(value); if (operator === this.CONSTANT.LIKE) value = "%" + value + "%"; if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " (" + column + " " + operator + " '" + value + "'"; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " (" + column + " " + operator + " '" + value + "'"; return this; }; Base.prototype.orWhereGroupStart = function (column, operator, value) { var _a; _a = this._valueAndOperator(value, operator, arguments.length === 2), value = _a[0], operator = _a[1]; value = this.HELPER.escape(value); value = this._valueTrueFalse(value); if (operator === this.CONSTANT.LIKE) value = "%" + value + "%"; if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " (" + column + " " + operator + " '" + value + "'"; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " (" + column + " " + operator + " '" + value + "'"; return this; }; Base.prototype.whereGroupEnd = function (column, operator, value) { var _a; _a = this._valueAndOperator(value, operator, arguments.length === 2), value = _a[0], operator = _a[1]; value = this.HELPER.escape(value); value = this._valueTrueFalse(value); if (operator === this.CONSTANT.LIKE) value = "%" + value + "%"; if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + operator + " '" + value + "')"; else this.WHERE = this.WHERE + " " + this.CONSTANT.OR + " " + column + " " + operator + " '" + value + "')"; return this; }; Base.prototype.orWhereGroupEnd = function (column, operator, value) { var _a; _a = this._valueAndOperator(value, operator, arguments.length === 2), value = _a[0], operator = _a[1]; value = this.HELPER.escape(value); value = this._valueTrueFalse(value); if (operator === this.CONSTANT.LIKE) value = "%" + value + "%"; if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + operator + " '" + value + "')"; else this.WHERE = this.WHERE + " " + this.CONSTANT.OR + " " + column + " " + operator + " '" + value + "')"; return this; }; Base.prototype.where = function (column, operator, value) { var _a; _a = this._valueAndOperator(value, operator, arguments.length === 2), value = _a[0], operator = _a[1]; value = this.HELPER.escape(value); value = this._valueTrueFalse(value); if (operator === this.CONSTANT.LIKE) value = "%" + value + "%"; if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + operator + " '" + value + "'"; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + operator + " '" + value + "'"; return this; }; Base.prototype.whereId = function (id) { var column = 'id'; var operator = '='; if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + operator + " '" + id + "'"; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + operator + " '" + id + "'"; return this; }; Base.prototype.whereEmail = function (value) { var column = 'email'; var operator = '='; value = this.HELPER.escape(value); if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + operator + " '" + value + "'"; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + operator + " '" + value + "'"; return this; }; Base.prototype.whereUser = function (id) { var column = this._isSnakeCase() ? 'user_id' : 'userId'; var operator = '='; id = this.HELPER.escape(id); if (!this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + operator + " '" + id + "'"; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + operator + " '" + id + "'"; return this; }; Base.prototype.orWhere = function (column, operator, value) { var _a; _a = this._valueAndOperator(value, operator, arguments.length === 2), value = _a[0], operator = _a[1]; value = this.HELPER.escape(value); if (operator === this.CONSTANT.LIKE) value = "%" + value + "%"; if (this.WHERE.includes(this.CONSTANT.WHERE)) this.WHERE = this.WHERE + " " + this.CONSTANT.OR + " " + column + " " + operator + " '" + value + "'"; else this.WHERE = this.CONSTANT.WHERE + " " + column + " " + operator + " '" + value + "'"; return this; }; Base.prototype.orWhereIn = function (column, arrayValues) { var sql = this.WHERE; if (!Array.isArray(arrayValues)) throw new Error("value is't array"); if (!arrayValues.length) arrayValues = ['0']; if (!sql.includes(this.CONSTANT.WHERE)) { this.WHERE = this.CONSTANT.WHERE + " " + column + " " + this.CONSTANT.IN + " (" + arrayValues.map(function (a) { return "'" + a + "'"; }).join(',') + ")"; return this; } this.WHERE = this.WHERE + " " + this.CONSTANT.OR + " " + column + " " + this.CONSTANT.IN + " (" + arrayValues.map(function (a) { return "'" + a + "'"; }).join(',') + ")"; return this; }; Base.prototype.whereIn = function (column, arrayValues) { var sql = this.WHERE; if (!Array.isArray(arrayValues)) throw new Error("value is't array"); if (!arrayValues.length) arrayValues = ['0']; if (!sql.includes(this.CONSTANT.WHERE)) { this.WHERE = this.CONSTANT.WHERE + " " + column + " " + this.CONSTANT.IN + " (" + arrayValues.map(function (a) { return "'" + a + "'"; }).join(',') + ")"; return this; } this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + this.CONSTANT.IN + " (" + arrayValues.map(function (a) { return "'" + a + "'"; }).join(',') + ")"; return this; }; Base.prototype.whereNotIn = function (column, arrayValues) { var sql = this.WHERE; if (!Array.isArray(arrayValues)) throw new Error("value is't array"); if (!arrayValues.length) arrayValues = ['0']; if (!sql.includes(this.CONSTANT.WHERE)) { this.WHERE = this.CONSTANT.WHERE + " " + column + " " + this.CONSTANT.NOT_IN + " (" + arrayValues.map(function (a) { return "'" + a + "'"; }).join(',') + ")"; return this; } this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + this.CONSTANT.NOT_IN + " (" + arrayValues.map(function (a) { return "'" + a + "'"; }).join(',') + ")"; return this; }; Base.prototype.whereSubQuery = function (column, subQuery) { var whereSubQuery = this.WHERE; subQuery = this.HELPER.escapeSubQuery(subQuery); if (!whereSubQuery.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + this.CONSTANT.IN + " (" + subQuery + ")"; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + this.CONSTANT.IN + " (" + subQuery + ")"; return this; }; Base.prototype.whereNotInSubQuery = function (column, subQuery) { var whereSubQuery = this.WHERE; subQuery = this.HELPER.escapeSubQuery(subQuery); if (!whereSubQuery.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + this.CONSTANT.IN + " (" + subQuery + ")"; else this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + this.CONSTANT.NOT_IN + " (" + subQuery + ")"; return this; }; Base.prototype.orWhereSubQuery = function (column, subQuery) { var whereSubQuery = this.WHERE; subQuery = this.HELPER.escapeSubQuery(subQuery); if (!whereSubQuery.includes(this.CONSTANT.WHERE)) this.WHERE = this.CONSTANT.WHERE + " " + column + " " + this.CONSTANT.IN + " (" + subQuery + ")"; else this.WHERE = this.WHERE + " " + this.CONSTANT.OR + " " + column + " " + this.CONSTANT.IN + " (" + subQuery + ")"; return this; }; Base.prototype.whereBetween = function (column, arrayValue) { if (!Array.isArray(arrayValue)) throw new Error("Value is't array"); if (!arrayValue.length) arrayValue = ['0', '0']; var value1 = arrayValue[0], value2 = arrayValue[1]; value1 = this.HELPER.escape(value1); value2 = this.HELPER.escape(value2); var sql = this.WHERE; if (!sql.includes(this.CONSTANT.WHERE)) { this.WHERE = this.CONSTANT.WHERE + " " + column + " " + this.CONSTANT.BETWEEN + " '" + value1 + "' " + this.CONSTANT.AND + " '" + value2 + "'"; } else { this.WHERE = this.WHERE + " " + this.CONSTANT.AND + " " + column + " " + this.CONSTANT.BETWEEN + " '" + value1 + "' " + this.CONSTANT.AND + " '" + value2 + "'"; } return this; }; Base.prototype.having = function (condition) { this.HAVING = condition; return this; }; Base.prototype.join = function (pk, fk) { var _a; var table = (_a = fk.split('.')) === null || _a === void 0 ? void 0 : _a.shift(); if (this.JOIN) this.JOIN = this.JOIN + " " + this.CONSTANT.INNER_JOIN + " " + table + " " + this.CONSTANT.ON + " " + pk + " = " + fk; else this.JOIN = this.CONSTANT.INNER_JOIN + " " + table + " " + this.CONSTANT.ON + " " + pk + " = " + fk; return this; }; Base.prototype.rightJoin = function (pk, fk) { var _a; var table = (_a = fk.split('.')) === null || _a === void 0 ? void 0 : _a.shift(); if (this.JOIN) this.JOIN = this.JOIN + " " + this.CONSTANT.RIGHT_JOIN + " " + table + " " + this.CONSTANT.ON + " " + pk + " = " + fk; else this.JOIN = this.CONSTANT.RIGHT_JOIN + " " + table + " " + this.CONSTANT.ON + " " + pk + " = " + fk; return this; }; Base.prototype.leftJoin = function (pk, fk) { var _a; var table = (_a = fk.split('.')) === null || _a === void 0 ? void 0 : _a.shift(); if (this.JOIN) this.JOIN = this.JOIN + " " + this.CONSTANT.LEFT_JOIN + " " + table + " " + this.CONSTANT.ON + " " + pk + " = " + fk; else this.JOIN = this.CONSTANT.LEFT_JOIN + " " + table + " " + this.CONSTANT.ON + " " + pk + " = " + fk; return this; }; Base.prototype.orderBy = function (column, order) { if (order === void 0) { order = this.CONSTANT.ASC; } order = order.toUpperCase(); this.ORDER_BY = this.CONSTANT.ORDER_BY + " " + column + " " + order; return this; }; Base.prototype.latest = function (column) { if (column === void 0) { column = 'id'; } if (this.ORDER_BY) { this.ORDER_BY = this.ORDER_BY + " ," + column + " " + this.CONSTANT.DESC; return this; } this.ORDER_BY = this.CONSTANT.ORDER_BY + " " + column + " " + this.CONSTANT.DESC; return this; }; Base.prototype.oldest = function (column) { if (column === void 0) { column = 'id'; } if (this.ORDER_BY) { this.ORDER_BY = this.ORDER_BY + " ," + column + " " + this.CONSTANT.ASC; return this; } this.ORDER_BY = this.CONSTANT.ORDER_BY + " " + column + " " + this.CONSTANT.ASC; return this; }; Base.prototype.groupBy = function (column) { this.GROUP_BY = this.CONSTANT.GROUP_BY + " " + column; return this; }; Base.prototype.limit = function (number) { if (number === void 0) { number = 1; } this.LIMIT = this.CONSTANT.LIMIT + " " + number; return this; }; Base.prototype.hidden = function () { var columns = []; for (var _i = 0; _i < arguments.length; _i++) { columns[_i] = arguments[_i]; } this.HIDDEN = columns; return this; }; Base.prototype.update = function (objects) { var query = this._queryUpdate(objects); this.UPDATE = this.CONSTANT.UPDATE + " " + this.TABLE_NAME + " " + query; this.SAVE = 'UPDATE'; return this; }; Base.prototype.insert = function (objects) { var query = this._queryInsert(objects); this.INSERT = this.CONSTANT.INSERT + " " + this.TABLE_NAME + " " + query; this.SAVE = 'INSERT'; return this; }; Base.prototype.create = function (objects, transaction) { var query = this._queryInsert(objects); this.INSERT = this.CONSTANT.INSERT + " " + this.TABLE_NAME + " " + query; this.SAVE = 'INSERT'; this.TRANSACTION = transaction; return this; }; Base.prototype.createMultiple = function (data, transaction) { var query = this._queryInsertMultiple(data); this.INSERT = this.CONSTANT.INSERT + " " + this.TABLE_NAME + " " + query; this.SAVE = 'INSERT_MULTIPLE'; this.TRANSACTION = transaction; return this; }; Base.prototype.toString = function (_a) { var _b = _a === void 0 ? {} : _a, _c = _b.debug, debug = _c === void 0 ? false : _c; try { var sql = this._getSQL(); if (debug) console.log(sql); return sql; } catch (err) { throw new Error(err.message); } }; Base.prototype.toSQL = function (_a) { var _b = _a === void 0 ? {} : _a, _c = _b.debug, debug = _c === void 0 ? false : _c; try { var sql = this._getSQL(); if (debug) console.log(sql); return sql; } catch (err) { throw new Error(err.message); } }; Base.prototype.debug = function () { this.DEBUG = true; return this; }; Base.prototype.queryStatement = function (sql) { return __awaiter(this, void 0, void 0, function () { var CONNECTION_1, result_2, CONNECTION, result; return __generator(this, function (_a) { switch (_a.label) { case 0: if (this.DEBUG) console.log(sql); if (!(this.DIALECT === this.CONSTANT.POSTGRESQL)) return [3 /*break*/, 3]; return [4 /*yield*/, this.CONNECTION]; case 1: CONNECTION_1 = _a.sent(); return [4 /*yield*/, CONNECTION_1.query(sql)]; case 2: result_2 = (_a.sent()).rows; return [2 /*return*/, result_2]; case 3: return [4 /*yield*/, this.CONNECTION]; case 4: CONNECTION = _a.sent(); return [4 /*yield*/, CONNECTION.query(sql)]; case 5: result = _a.sent(); this._registry(result); return [2 /*return*/, result]; } }); }); }; Base.prototype.actionStatement = function (_a) { var _b = _a === void 0 ? {} : _a, sql = _b.sql, _c = _b.returnId, returnId = _c === void 0 ? false : _c; return __awaiter(this, void 0, void 0, function () { var CONNECTION, result_3, result_4, result_5, result; return __generator(this, function (_d) { switch (_d.label) { case 0: return [4 /*yield*/, this.CONNECTION]; case 1: CONNECTION = _d.sent(); if (this.DEBUG) console.log(sql); if (!(this.DIALECT === this.CONSTANT.POSTGRESQL)) return [3 /*break*/, 5]; if (!returnId) return [3 /*break*/, 3]; return [4 /*yield*/, CONNECTION.query(sql + 'RETURNING id')]; case 2: result_3 = _d.sent(); return [2 /*return*/, [result_3.rowCount, result_3.rows.shift().id]]; case 3: return [4 /*yield*/, CONNECTION.query(sql)]; case 4: result_4 = (_d.sent()).rowCount; return [2 /*return*/, result_4]; case 5: if (!returnId) return [3 /*break*/, 7]; return [4 /*yield*/, CONNECTION.query(sql)]; case 6: result_5 = _d.sent(); return [2 /*return*/, [result_5.affectedRows, result_5.insertId]]; case 7: return [4 /*yield*/, CONNECTION.query(sql)]; case 8: result = (_d.sent()).affectedRows; return [2 /*return*/, result]; } }); }); }; Base.prototype.all = function (_a) { var _b = _a === void 0 ? {} : _a, _c = _b.debug, debug = _c === void 0 ? false : _c; return __awaiter(this, void 0, void 0, function () { var sql, result, err_4; return __generator(this, function (_d) { switch (_d.label) { case 0: _d.trys.push([0, 2, , 3]); if (!this.DEBUG) this.DEBUG = debug; sql = this.CONSTANT.SELECT + " * " + this.CONSTANT.FROM + " " + this.TABLE_NAME; return [4 /*yield*/, this.queryStatement(sql)]; case 1: result = _d.sent(); return [2 /*return*/, result]; case 2: err_4 = _d.sent(); throw new Error(err_4.message); case 3: return [2 /*return*/]; } }); }); }; Base.prototype.find = function (id, _a) { var _b = _a === void 0 ? {} : _a, _c = _b.debug, debug = _c === void 0 ? false : _c; return __awaiter(this, void 0, void 0, function () { var sql, result, err_5; return __generator(this, function (_d) { switch (_d.label) { case 0: _d.trys.push([0, 2, , 3]); if (!this.DEBUG) this.DEBUG = debug; sql = this.CONSTANT.SELECT + " * " + this.CONSTANT.FROM + " " + this.TABLE_NAME + " " + this.CONSTANT.WHERE + " id = " + id; return [4 /*yield*/, this.queryStatement(sql)]; case 1: result = _d.sent(); return [2 /*return*/, result.shift() || null]; case 2: err_5 = _d.sent(); throw new Error(err_5.message); case 3: return [2 /*return*/]; } }); }); }; Base.prototype.pagination = function (_a) { var _b = _a === void 0 ? {} : _a, _c = _b.limit, limit = _c === void 0 ? 15 : _c, _d = _b.page, page = _d === void 0 ? 1 : _d, _e = _b.debug, debug = _e === void 0 ? false : _e; return __awaiter(this, void 0, void 0, function () { var currentPage, offset, sql, result, count, total, lastPage, data, err_6; return __generator(this, function (_f) { switch (_f.label) { case 0: _f.trys.push([0, 3, , 4]); if (!this.DEBUG) this.DEBUG = debug; currentPage = page; limit = limit > 1 ? limit : 1; offset = (page - 1) * limit; sql = this._getSQL(); if (!sql.includes(this.CONSTANT.LIMIT)) { sql = sql + " " + this.CONSTANT.LIMIT + " " + limit + " " + this.CONSTANT.OFFSET + " " + offset; } else { sql = sql.replace(this.LIMIT, limit + " " + this.CONSTANT.OFFSET + " " + offset); } return [4 /*yield*/, this.queryStatement(sql)]; case 1: result = _f.sent(); if (this.HIDDEN.length) this._hiddenColumn(result); if (!result.length) return [2 /*return*/, [currentPage, []]]; this.SELECT = this.CONSTANT.SELECT + " " + this.CONSTANT.COUNT + "(*) " + this.CONSTANT.AS + " total"; sql = this._getSQL(); return [4 /*yield*/, this.queryStatement(sql)]; case 2: count = _f.sent(); total = count.shift().total || 0; lastPage = Math.ceil(total / limit) || 0; lastPage = lastPage > 1 ? lastPage : 1; data = { currentPage: currentPage, lastPage: lastPage, total: total, limit: limit, result: result }; return [2 /*return*/, data]; case 3: err_6 = _f.sent(); throw new Error(err_6.message); case 4: return [2 /*return*/]; } }); }); }; Base.prototype.findOne = function (_a) { var _b = _a === void 0 ? {} : _a, _c = _b.debug, debug = _c === void 0 ? false : _c; return __awaiter(this, void 0, void 0, function () { var sql, result, err_7; return __generator(this, function (_d) { switch (_d.label) { case 0: _d.trys.push([0, 2, , 3]); if (!this.DEBUG) this.DEBUG = debug; sql = this._getSQL(); if (!sql.includes(this.CONSTANT.LIMIT)) sql = sql + " " + this.CONSTANT.LIMIT + " 1"; else sql = sql.replace(this.LIMIT, this.CONSTANT.LIMIT + " 1"); return [4 /*yield*/, this.queryStatement(sql)]; case 1: result = _d.sent(); if (this.HIDDEN.length) this._hiddenColumn(result); return [2 /*return*/, result.shift() || null]; case 2: err_7 = _d.sent(); throw new Error(err_7.message); case 3: return [2 /*return*/]; } }); }); }; Base.prototype.first = function (_a) { var _b = _a === void 0 ? {} : _a, _c = _b.debug, debug = _c === void 0 ? false : _c; return __awaiter(this, void 0, void 0, function () { var sql, result, err_8; return __generator(this, function (_d) { switch (_d.label) { case 0: _d.trys.push([0, 2, , 3]); if (!this.DEBUG) this.DEBUG = debug; sql = this._getSQL(); if (!sql.includes(this.CONSTANT.LIMIT)) sql = sql + " " + this.CONSTANT.LIMIT + " 1"; else sql = sql.replace(this.LIMIT, this.CONSTANT.LIMIT + " 1"); return [4 /*yield*/, this.queryStatement(sql)]; case 1: result = _d.sent(); if (this.HIDDEN.length) this._hiddenColumn(result); return [2 /*return*/, result.shift() || null]; case 2: err_8 = _d.sent(); throw new Error(err_8.message); case 3: return [2 /*return*/]; } }); }); }; Base.prototype.findMany = function (_a) { var _b = _a === void 0 ? {} : _a, _c = _b.debug, debug = _c === void 0 ? false : _c; return __awaiter(this, void 0, void 0, function () { var sql, result, err_9; return __generator(this, function (_d) { switch (_d.label) { case 0: _d.trys.push([0, 2, , 3]);