ddl-manager
Version:
store postgres procedures and triggers in files
68 lines • 3.03 kB
JavaScript
;
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