UNPKG

database-builder

Version:

Library to assist in creating and maintaining SQL commands.

123 lines (122 loc) 6.96 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.ProjectionsHelper = void 0; var projection_1 = require("../crud/enums/projection"); var utils_1 = require("./utils"); var projections_utils_1 = require("./projections-utils"); var projection_compiled_1 = require("../crud/projection-compiled"); var errors_1 = require("./errors"); var query_helper_1 = require("./query-helper"); var ProjectionsHelper = /** @class */ (function () { function ProjectionsHelper(_typeT, _aliasTable, _addAliasTableToAlias, _registerProjetionCallback, // tslint:disable-next-line: variable-name __result) { if (_addAliasTableToAlias === void 0) { _addAliasTableToAlias = false; } this._typeT = _typeT; this._aliasTable = _aliasTable; this._addAliasTableToAlias = _addAliasTableToAlias; this._registerProjetionCallback = _registerProjetionCallback; this.__result = __result; this._projectionsUtils = new projections_utils_1.ProjectionsUtils(_aliasTable, _addAliasTableToAlias, void 0, _registerProjetionCallback); } ProjectionsHelper.prototype._result = function () { return this.__result; }; ProjectionsHelper.prototype.resultWithoutParams = function () { var result = this._result(); return result.map(function (r) { return query_helper_1.QueryHelper.compileWithoutParams(r.projection, r.params); }); }; ProjectionsHelper.prototype.exp = function (expression, alias, args) { if (alias === void 0) { alias = ""; } return this.getResult(this._projectionsUtils.apply(expression, [], alias, args)); }; ProjectionsHelper.prototype.concat = function (alias) { var projections = []; for (var _i = 1; _i < arguments.length; _i++) { projections[_i - 1] = arguments[_i]; } return this.group.apply(this, __spreadArray([alias], projections, false)); }; ProjectionsHelper.prototype.group = function (alias) { var projections = []; for (var _i = 1; _i < arguments.length; _i++) { projections[_i - 1] = arguments[_i]; } var projectionsCompiled = new projection_compiled_1.ProjectionCompiled(); projections.forEach(function (projection) { var compiled = utils_1.Utils.resolveExpressionProjection(projection); projectionsCompiled.projection += "".concat(compiled.projection, " "); projectionsCompiled.params = projectionsCompiled.params.concat(compiled.params); }); projectionsCompiled.projection = projectionsCompiled.projection.trim(); return this.getResult(this._projectionsUtils.apply(projectionsCompiled.projection, [projection_1.Projection.BetweenParenthesis], alias, projectionsCompiled.params)); }; ProjectionsHelper.prototype.sum = function (expression, alias, args) { if (alias === void 0) { alias = ""; } return this.getResult(this._projectionsUtils.apply(expression, [projection_1.Projection.Sum], alias, args)); }; ProjectionsHelper.prototype.max = function (expression, alias, args) { if (alias === void 0) { alias = ""; } return this.getResult(this._projectionsUtils.apply(expression, [projection_1.Projection.Max], alias, args)); }; ProjectionsHelper.prototype.min = function (expression, alias, args) { if (alias === void 0) { alias = ""; } return this.getResult(this._projectionsUtils.apply(expression, [projection_1.Projection.Min], alias, args)); }; ProjectionsHelper.prototype.avg = function (expression, alias, args) { if (alias === void 0) { alias = ""; } return this.getResult(this._projectionsUtils.apply(expression, [projection_1.Projection.Avg], alias, args)); }; ProjectionsHelper.prototype.count = function (expression, alias, args) { if (alias === void 0) { alias = ""; } return this.getResult(this._projectionsUtils.apply(expression, [projection_1.Projection.Count], alias, args)); }; ProjectionsHelper.prototype.cast = function (expression, alias, args) { if (alias === void 0) { alias = ""; } return this.getResult(this._projectionsUtils.apply(expression, [projection_1.Projection.Cast], alias, args)); }; ProjectionsHelper.prototype.distinct = function (expression, alias, args) { if (alias === void 0) { alias = ""; } return this.getResult(this._projectionsUtils.apply(expression, [projection_1.Projection.Distinct], alias, args)); }; ProjectionsHelper.prototype.round = function (expression, alias, args) { if (alias === void 0) { alias = ""; } return this.getResult(this._projectionsUtils.apply(expression, [projection_1.Projection.Round], alias, args)); }; ProjectionsHelper.prototype.coalesce = function (expression, argumentsCoalesce, alias, args) { if (alias === void 0) { alias = ""; } if (args === void 0) { args = []; } if (argumentsCoalesce && argumentsCoalesce.length === 0) { throw new errors_1.DatabaseBuilderError("At least one argument is necessary in the coalesce!"); } if (utils_1.Utils.isQueryCompilable(expression)) { return this.coalesce(expression.compile(), argumentsCoalesce, alias, args); } if (utils_1.Utils.isQueryCompiledArray(expression)) { if (expression.length === 1) { return this.coalesce("(".concat(expression[0].query, ")"), argumentsCoalesce, alias, expression[0].params); } else { throw new errors_1.DatabaseBuilderError("query cascade isn't supported in projections (".concat(expression.length, ")")); } } return this.getResult(this._projectionsUtils.apply(__spreadArray(["".concat(this._projectionsUtils.addAliasTable(utils_1.Utils.getColumn(expression)))], argumentsCoalesce.map(function (x) { return "?"; }), true).join(", "), [projection_1.Projection.Coalesce], alias, __spreadArray(__spreadArray([], args, true), argumentsCoalesce, true))); }; ProjectionsHelper.prototype.getResult = function (result) { if (result) { return new ProjectionsHelper(this._typeT, this._aliasTable, this._addAliasTableToAlias, this._registerProjetionCallback, [result]); } return this; }; return ProjectionsHelper; }()); exports.ProjectionsHelper = ProjectionsHelper;