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