UNPKG

database-builder

Version:

Library to assist in creating and maintaining SQL commands.

102 lines (101 loc) 4.83 kB
"use strict"; 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;