UNPKG

ddl-manager

Version:

store postgres procedures and triggers in files

68 lines 3.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AbstractTriggerBuilder = void 0; const lodash_1 = require("lodash"); const Comment_1 = require("../../database/schema/Comment"); const DatabaseFunction_1 = require("../../database/schema/DatabaseFunction"); const DatabaseTrigger_1 = require("../../database/schema/DatabaseTrigger"); const TableID_1 = require("../../database/schema/TableID"); const TableReference_1 = require("../../database/schema/TableReference"); const ConditionBuilder_1 = require("./condition/ConditionBuilder"); const defaults_1 = require("../../parser/defaults"); class AbstractTriggerBuilder { constructor(context) { this.context = context; this.conditions = new ConditionBuilder_1.ConditionBuilder(context); } createDatabaseTriggerOnDIU() { const updateOfColumns = this.buildUpdateOfColumns(); return this.createDatabaseTrigger({ name: this.context.generateTriggerName(), after: true, insert: this.needListenInsert(), update: updateOfColumns.length > 0, updateOf: updateOfColumns, delete: true, }); } createDatabaseTrigger(json = {}) { const triggerName = json.name || this.context.generateTriggerName(); const trigger = new DatabaseTrigger_1.DatabaseTrigger(Object.assign({ name: triggerName, before: false, after: false, insert: false, update: false, delete: false, procedure: { schema: "public", name: triggerName, args: [] }, table: new TableID_1.TableID(this.context.triggerTable.schema || defaults_1.DEFAULT_SCHEMA, this.context.triggerTable.name), comment: Comment_1.Comment.fromFs({ objectType: "trigger", cacheSignature: this.context.cache.getSignature() }) }, json)); return trigger; } createDatabaseFunction(body, name = this.context.generateTriggerName()) { const func = new DatabaseFunction_1.DatabaseFunction({ schema: "public", name, body: "\n" + body.toSQL() + "\n", comment: Comment_1.Comment.fromFs({ objectType: "function", cacheSignature: this.context.cache.getSignature() }), args: [], returns: { type: "trigger" } }); return func; } // can be redefined needListenInsert() { return !this.context.withoutInsertCase(); } replaceTriggerTableToRow(row, expression) { return expression.replaceTable(this.context.triggerTable, new TableReference_1.TableReference(this.context.triggerTable, row)); } buildUpdateOfColumns() { const updateOfColumns = this.context.triggerTableColumns .filter(column => column !== "id"); return lodash_1.uniq(updateOfColumns).sort(); } } exports.AbstractTriggerBuilder = AbstractTriggerBuilder; //# sourceMappingURL=AbstractTriggerBuilder.js.map