UNPKG

database-builder

Version:

Library to assist in creating and maintaining SQL commands.

94 lines (93 loc) 5.04 kB
"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;