database-builder
Version:
Library to assist in creating and maintaining SQL commands.
94 lines (93 loc) • 5.04 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RowResult = void 0;
var utils_1 = require("./utils");
var database_helper_1 = require("../database-helper");
var errors_1 = require("./errors");
var model_utils_1 = require("./model-utils");
var mapper_utils_1 = require("../mapper/mapper-utils");
var row_mapper_1 = require("./row-mapper");
var RowResult = /** @class */ (function () {
function RowResult(_valueT, _newable, _mapper, _getMapper, _query) {
this._valueT = _valueT;
this._newable = _newable;
this._mapper = _mapper;
this._getMapper = _getMapper;
this._query = _query;
this._databaseHelper = new database_helper_1.DatabaseHelper();
}
RowResult.prototype.parse = function (expression, type) {
var value = utils_1.Utils.getValue(this._valueT, expression);
return this._databaseHelper.databaseToValue(value, type);
};
RowResult.prototype.autoParse = function (expression) {
if (this._mapper) {
var column_1 = utils_1.Utils.getColumn(expression);
var value = utils_1.Utils.getValue(this._valueT, column_1);
return this._databaseHelper.databaseToValue(value, this._mapper.columns.find(function (x) { return x.column === column_1; }).fieldType);
}
// tslint:disable-next-line:no-console
console.warn("Auto parse not possible. (MapperTable not found)");
return this.get(expression);
};
RowResult.prototype.get = function (expression) {
var _a;
return (_a = utils_1.Utils.getValue(this._valueT, expression)) === null || _a === void 0 ? void 0 : _a[0];
};
RowResult.prototype.single = function () {
var _a;
var keys = Object.keys(this._valueT);
if (keys.length == 1) {
return (_a = utils_1.Utils.getValue(this._valueT, keys[0])) === null || _a === void 0 ? void 0 : _a[0];
}
throw "It is not possible to get a single result (using .single()) when there are multiple projections in the query. Details: number of projections: ".concat(keys.length, ", current projections: ").concat(keys);
};
RowResult.prototype.coalesce = function (expression, defaultValue) {
var value = this.get(expression);
// tslint:disable-next-line:triple-equals
return value == void 0 ? defaultValue : value;
};
RowResult.prototype.read = function (typeT, alias) {
var _this = this;
if (alias === void 0) { alias = void 0; }
if (utils_1.Utils.isNull(alias) && this._query && mapper_utils_1.MapperUtils.resolveKey(typeT) !== this._query.tablename) {
alias = this._query.getAlias(typeT);
if (utils_1.Utils.isNull(alias)) {
throw new errors_1.DatabaseBuilderError("alias not found for the reference of \"".concat(mapper_utils_1.MapperUtils.resolveKey(typeT), "\", you can enter an alias explicitly in the last parameter"));
}
}
var mapperTable = this.getMapper(typeT);
var result = typeT ? new typeT() : {};
mapperTable.columns.forEach(function (column) {
if (utils_1.Utils.isNameColumn(column.column)) {
var value = _this._databaseHelper.databaseToValue(_this._valueT[alias ? "".concat(alias, "_").concat(column.column) : column.column], column.fieldType);
model_utils_1.ModelUtils.set(result, column.fieldReference, value);
// TODO: essa associação será redundante para itens de primeiro nivel, mas será mantida para compatibilidade com itens de segundo nivel ou mais, pois há mapper que buscam a propriedade de sub nivel pelo nome da coluna por exemplo: 'cliente_cidade_uf_id'
// BREAKING-CHANGE: Na proxima versão da aplicação essa compatibilidade deve ser removida, o que era causar quebra de versão, onde terá que ser alterada implementações que o "mapper" para obter valores de propriedades de sub nivel.
result[column.column] = value;
}
});
return result;
};
RowResult.prototype.map = function () {
if (this._newable) {
return new row_mapper_1.RowMapper(this).map(this._newable, "", "");
}
throw new errors_1.DatabaseBuilderError("Not allowed map entity not unknown entity");
};
RowResult.prototype.getMapper = function (typeT) {
if (this._getMapper) {
var mapper = this._getMapper(typeT);
if (!mapper) {
throw new errors_1.DatabaseBuilderError("Mapper not avaliable for type: \"".concat(typeT, "\"!"));
}
return mapper.mapperTable;
}
if (!this._mapper) {
throw new errors_1.DatabaseBuilderError("get mapper for type and mapper not avaliable!");
}
return this._mapper;
};
return RowResult;
}());
exports.RowResult = RowResult;