UNPKG

database-builder

Version:

Library to assist in creating and maintaining SQL commands.

78 lines (77 loc) 4.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CommanderBuilder = void 0; var core_1 = require("../core"); var utils_1 = require("../core/utils"); var CommanderBuilder = /** @class */ (function () { function CommanderBuilder(_config) { this._config = _config; } CommanderBuilder.prototype.delete = function (tableName) { return { params: [], query: "DELETE FROM ".concat(tableName), }; }; CommanderBuilder.prototype.deleteMapper = function (mapper) { return this.delete(mapper.tableName); }; CommanderBuilder.prototype.update = function (tableName, columnsNames, params) { return { params: [].concat(params), query: "UPDATE ".concat(tableName, " SET ").concat(columnsNames.join(", ")), }; }; CommanderBuilder.prototype.updateColumn = function (tableName, columns, model) { return this.update(tableName, columns.map(function (x) { return x.column; }), columns.map(function (column) { var _a; return (_a = utils_1.Utils.getValue(model, column.fieldReference)) === null || _a === void 0 ? void 0 : _a[0]; })); }; CommanderBuilder.prototype.updateMapper = function (mapper, model) { return this.updateColumn(mapper.tableName, mapper.columns, model); }; CommanderBuilder.prototype.insert = function (tableName, columnsNames, params) { return this.batchInsert(tableName, columnsNames, [params])[0]; }; CommanderBuilder.prototype.insertColumn = function (tableName, columns, model) { return this.batchInsertColumn(tableName, columns, [model])[0]; }; CommanderBuilder.prototype.insertMapper = function (mapper, model) { return this.batchInsertMapper(mapper, [model])[0]; }; CommanderBuilder.prototype.batchInsert = function (tableName, columnsNames, values) { if (this.validValues(values)) { return this.splitChunks(values, Math.floor(this._config.sqliteLimitVariables / columnsNames.length)).map(function (valuesChunk) { return ({ params: [].concat.apply([], valuesChunk), query: utils_1.Utils.normalizeSqlString("INSERT INTO ".concat(tableName, "\n (").concat(columnsNames.join(", "), ")\n VALUES ").concat(valuesChunk .map(function (a) { return "(".concat(a.map(function () { return "?"; }).join(", "), ")"); }) .join(", "))) }); }); } }; CommanderBuilder.prototype.validValues = function (values) { if (values.length < 1) throw new core_1.DatabaseBuilderError("Values not informed"); var sizeInnerArray = values === null || values === void 0 ? void 0 : values[0].length; if (sizeInnerArray < 1) throw new core_1.DatabaseBuilderError("Inner values not informed"); if (!values.every(function (x) { return x.length === sizeInnerArray; })) throw new core_1.DatabaseBuilderError("Values with different size not suportted, values: ".concat(JSON.stringify(values))); return true; }; CommanderBuilder.prototype.batchInsertColumn = function (tableName, columns, models) { return this.batchInsert(tableName, columns.map(function (x) { return x.column; }), models.map(function (model) { return columns.map(function (column) { var _a; return (_a = utils_1.Utils.getValue(model, column.fieldReference)) === null || _a === void 0 ? void 0 : _a[0]; }); })); }; CommanderBuilder.prototype.batchInsertMapper = function (mapper, models) { return this.batchInsertColumn(mapper.tableName, mapper.columns, models); }; CommanderBuilder.prototype.splitChunks = function (sourceArray, chunkSize) { var result = []; for (var i = 0; i < sourceArray.length; i += chunkSize) { result[i / chunkSize] = sourceArray.slice(i, i + chunkSize); } return result; }; return CommanderBuilder; }()); exports.CommanderBuilder = CommanderBuilder;