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