tspace-sql
Version:
mysql & postgresql query builder object relational mapping
995 lines (994 loc) • 74.5 kB
JavaScript
"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]);