database-builder
Version:
Library to assist in creating and maintaining SQL commands.
123 lines (122 loc) • 6.96 kB
JavaScript
"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;