UNPKG

ddl-manager

Version:

store postgres procedures and triggers in files

114 lines 4.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DatabaseTrigger = void 0; const constants_1 = require("../postgres/constants"); const TableID_1 = require("./TableID"); const Comment_1 = require("./Comment"); class DatabaseTrigger { constructor(json) { Object.assign(this, json); this.name = this.name.slice(0, constants_1.MAX_NAME_LENGTH); if (!(this.table instanceof TableID_1.TableID)) { const tableJson = this.table; this.table = new TableID_1.TableID(tableJson.schema, tableJson.name); } this.comment = json.comment || Comment_1.Comment.fromFs({ objectType: "trigger", }); this.frozen = this.comment.frozen; this.cacheSignature = this.comment.cacheSignature; } equal(otherTrigger) { return (this.name.slice(0, constants_1.MAX_NAME_LENGTH) === otherTrigger.name.slice(0, constants_1.MAX_NAME_LENGTH) && this.table.schema === otherTrigger.table.schema && this.table.name === otherTrigger.table.name && this.procedure.schema === otherTrigger.procedure.schema && this.procedure.name.slice(0, constants_1.MAX_NAME_LENGTH) === otherTrigger.procedure.name.slice(0, constants_1.MAX_NAME_LENGTH) && this.procedure.args.join(",") === otherTrigger.procedure.args.join(",") && !!this.before === !!otherTrigger.before && !!this.after === !!otherTrigger.after && !!this.insert === !!otherTrigger.insert && !!this.delete === !!otherTrigger.delete && !!this.update === !!otherTrigger.update && (this.updateOf || []).join(",") === (otherTrigger.updateOf || []).join(",") && this.comment.equal(otherTrigger.comment) && // null == undefined // tslint:disable-next-line: triple-equals this.when == otherTrigger.when && !!this.constraint === !!otherTrigger.constraint && !!this.deferrable === !!otherTrigger.deferrable && !!this.notDeferrable === !!otherTrigger.notDeferrable && !!this.statement === !!otherTrigger.statement && // null == undefined // tslint:disable-next-line: triple-equals this.initially == otherTrigger.initially); } getSignature() { return `${this.name} on ${this.table.schema}.${this.table.name}`; } clone(changes = {}) { return new DatabaseTrigger(Object.assign({ name: this.name, table: this.table, procedure: this.procedure, before: this.before, after: this.after, insert: this.insert, delete: this.delete, update: this.update, updateOf: this.updateOf, when: this.when, constraint: this.constraint, deferrable: this.deferrable, notDeferrable: this.notDeferrable, statement: this.statement, initially: this.initially, comment: this.comment }, changes)); } toSQL() { let out = "create "; if (this.constraint) { out += "constraint "; } out += `trigger ${this.name}\n`; // after|before if (this.before) { out += "before"; } else if (this.after) { out += "after"; } out += " "; // insert or update of x or delete const events = []; if (this.insert) { events.push("insert"); } if (this.update) { if (this.updateOf && this.updateOf.length) { events.push(`update of ${this.updateOf.join(", ")}`); } else if (this.update === true) { events.push("update"); } } if (this.delete) { events.push("delete"); } out += events.join(" or "); // table out += "\non "; out += `${this.table.schema}.${this.table.name}`; if (this.notDeferrable) { out += " not deferrable"; } if (this.deferrable) { out += " deferrable"; } if (this.initially) { out += " initially "; out += this.initially; } if (this.statement) { out += "\nfor each statement"; } else { out += "\nfor each row"; } if (this.when) { out += "\nwhen ( "; out += this.when; out += " ) "; } out += `\nexecute procedure ${this.procedure.schema === "public" ? "" : this.procedure.schema + "."}${this.procedure.name}()`; return out; } } exports.DatabaseTrigger = DatabaseTrigger; //# sourceMappingURL=DatabaseTrigger.js.map