UNPKG

database-builder

Version:

Library to assist in creating and maintaining SQL commands.

123 lines (122 loc) 5.85 kB
"use strict"; 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)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProjectionsUtils = void 0; var projection_model_1 = require("./../crud/projection-model"); var utils_1 = require("./utils"); var errors_1 = require("./errors"); var ProjectionsUtils = /** @class */ (function () { function ProjectionsUtils(_aliasTable, _addAliasTableToAlias, _addAliasDefault, _registerProjetionCallback) { if (_addAliasTableToAlias === void 0) { _addAliasTableToAlias = false; } if (_addAliasDefault === void 0) { _addAliasDefault = true; } this._aliasTable = _aliasTable; this._addAliasTableToAlias = _addAliasTableToAlias; this._addAliasDefault = _addAliasDefault; this._registerProjetionCallback = _registerProjetionCallback; this._pendingProjections = []; } ProjectionsUtils.prototype.apply = function (expression, projections, alias, args) { if (projections === void 0) { projections = []; } return this.checkApply(expression, projections, alias, args); }; ProjectionsUtils.prototype.create = function (column, projections, alias, args) { if (projections === void 0) { projections = []; } if (alias === void 0) { alias = this.defaultAliasAs(column); } if (args === void 0) { args = []; } return this.createProjection(projections, this.addAliasTable(column), alias, args); }; ProjectionsUtils.prototype.addAliasTable = function (column) { if (utils_1.Utils.isNameColumn(column)) { return "".concat(this._aliasTable, ".").concat(column); } return column; }; ProjectionsUtils.prototype._apply = function (expression, projections, alias, args) { if (projections === void 0) { projections = []; } if (args === void 0) { args = []; } if (utils_1.Utils.isQueryCompilable(expression)) { return this._apply(expression.compile(), projections, alias, args); } if (utils_1.Utils.isQueryCompiledArray(expression)) { if (expression.length === 1) { return this._apply("(".concat(expression[0].query, ")"), projections, alias, __spreadArray(__spreadArray([], args, true), expression[0].params, true)); } else { throw new errors_1.DatabaseBuilderError("query cascade isn't supported in projections (".concat(expression.length, ")")); } } return this.register(this.create(utils_1.Utils.getColumn(expression), projections, alias, args)); }; ProjectionsUtils.prototype.checkApply = function (expression, projections, alias, args) { var _this = this; if (projections === void 0) { projections = []; } if (utils_1.Utils.isNull(expression)) { projections.forEach(function (projection) { _this._pendingProjections.unshift(projection); }); return void 0; } else { this._pendingProjections.forEach(function (projection) { projections.unshift(projection); }); this._pendingProjections = []; return this._apply(expression, projections, alias, args); } }; ProjectionsUtils.prototype.register = function (projection) { if (this._registerProjetionCallback) { this._registerProjetionCallback(projection); } return projection; }; ProjectionsUtils.prototype.createProjection = function (projection, column, alias, args) { if (alias === void 0) { alias = this.defaultAliasAs(column); } if (!utils_1.Utils.isNull(projection)) { return this.buildColumn(this.builderProjections(projection, column), alias, args); } return this.buildColumn(column, alias, args); }; ProjectionsUtils.prototype.defaultAliasAs = function (column) { if (column === ProjectionsUtils.WILDCARD || !this._addAliasDefault) { return ""; } return this._addAliasTableToAlias ? "".concat(this._aliasTable, "_").concat(column) : column; }; ProjectionsUtils.prototype.builderProjections = function (projections, column) { var result = column; // reverse loop array for (var index = projections.length - 1; index >= 0; index--) { var projection = projections[index]; result = this.builderProjection(projection, result); } return result; }; ProjectionsUtils.prototype.builderProjection = function (projection, core) { return "".concat(projection, "(").concat(core, ")"); }; ProjectionsUtils.prototype.buildArgs = function (args) { if (args === void 0) { args = []; } return args.length ? ", " + args.join("") : ""; }; ProjectionsUtils.prototype.buildColumn = function (column, alias, args) { if (alias === void 0) { alias = this.defaultAliasAs(column); } if (alias && alias.length) { return new projection_model_1.ProjectionModel("".concat(column, " AS ").concat(alias), args ? args : []); } return new projection_model_1.ProjectionModel(column, args ? args : []); }; ProjectionsUtils.WILDCARD = "*"; return ProjectionsUtils; }()); exports.ProjectionsUtils = ProjectionsUtils;