database-builder
Version:
Library to assist in creating and maintaining SQL commands.
102 lines (101 loc) • 4.83 kB
JavaScript
;
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.SqlBase = void 0;
var executable_builder_1 = require("../core/executable-builder");
var errors_1 = require("../core/errors");
var utils_1 = require("../core/utils");
var model_utils_1 = require("../core/model-utils");
var rxjs_1 = require("rxjs");
var SqlBase = /** @class */ (function () {
function SqlBase(_a) {
var mapperTable = _a.mapperTable, _b = _a.database, database = _b === void 0 ? void 0 : _b, _c = _a.enableLog, enableLog = _c === void 0 ? true : _c;
this.mapperTable = mapperTable;
this.database = database;
this.enableLog = enableLog;
this._executableBuilder = new executable_builder_1.ExecutableBuilder(enableLog);
}
Object.defineProperty(SqlBase.prototype, "mainScriptLength", {
get: function () { return this._mainScriptLength; },
enumerable: false,
configurable: true
});
SqlBase.prototype.execute = function (_a) {
var _this = this;
var _b = _a === void 0 ? {} : _a, _c = _b.cascade, cascade = _c === void 0 ? true : _c, database = _b.database;
return new rxjs_1.Observable(function (observer) {
try {
_this.checkDatabaseResult(_this._executableBuilder.execute(_this.compile(cascade), _this.getDatabase(database))).subscribe(observer);
}
catch (error) {
observer.error(error);
}
});
};
SqlBase.prototype.compile = function (cascade) {
if (cascade === void 0) { cascade = true; }
var compiled = this.builderCompiled();
var compiledArray = Array.isArray(compiled) ? compiled : [compiled];
if (compiledArray.length > 1)
this._mainScriptLength = compiledArray.length;
var script = __spreadArray(__spreadArray([], compiledArray, true), this.compileDependency(cascade), true);
return script;
};
SqlBase.prototype.compileDependency = function (cascade) {
var _this = this;
var script = [];
if (cascade) {
this.dependencies().forEach(function (dependency) {
_this.checkAndPush(script, _this.resolveDependency(dependency));
script = __spreadArray(__spreadArray([], script, true), _this.compileDependencyByValue(dependency), true);
});
}
return script;
};
SqlBase.prototype.compileDependencyByValue = function (dependency) {
var script = [];
var columnDependency = this.mapperTable.columns.find(function (x) { return x.tableReference === dependency.tableName; });
var fieldArraySplit = columnDependency.fieldReference.split("[?].");
var valuesDependencyArray = utils_1.Utils.getValue(this.model(), fieldArraySplit[0]);
return __spreadArray(__spreadArray([], script, true), this.compileValuesDependency(dependency, valuesDependencyArray, fieldArraySplit === null || fieldArraySplit === void 0 ? void 0 : fieldArraySplit[1]), true);
};
SqlBase.prototype.compileValuesDependency = function (dependency, valuesDependencyArray, fieldReferenceSubItem) {
var _this = this;
var scripts = [];
valuesDependencyArray.forEach(function (valuesDependency) {
if (valuesDependency) {
valuesDependency.forEach(function (value, index) {
var valueItem = fieldReferenceSubItem ? model_utils_1.ModelUtils.get(value, fieldReferenceSubItem) : value;
_this.checkAndPush(scripts, _this.resolveDependencyByValue(dependency, valueItem, index));
});
}
});
return scripts;
};
SqlBase.prototype.resolveDependencyByValue = function (dependency, value, index) {
return void 0;
};
SqlBase.prototype.getDatabase = function (database) {
var result = (database ? database : this.database);
if (!result) {
throw new errors_1.DatabaseBuilderError("Database not specified in query.");
}
return result;
};
SqlBase.prototype.checkAndPush = function (scripts, push) {
if (Array.isArray(push))
scripts.push.apply(scripts, push);
else if (push)
scripts.push(push);
};
return SqlBase;
}());
exports.SqlBase = SqlBase;