ddl-manager
Version:
store postgres procedures and triggers in files
54 lines • 2.56 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SelfUpdateBySelfRowTriggerBuilder = void 0;
const AbstractTriggerBuilder_1 = require("./AbstractTriggerBuilder");
const buildSelfUpdateBySelfRowBody_1 = require("./body/buildSelfUpdateBySelfRowBody");
const buildSelfAssignBeforeInsertSelfColumnBody_1 = require("./body/buildSelfAssignBeforeInsertSelfColumnBody");
class SelfUpdateBySelfRowTriggerBuilder extends AbstractTriggerBuilder_1.AbstractTriggerBuilder {
createTriggers() {
return [
...this.createOnUpdateTriggers(),
...this.createOnInsertTriggers()
];
}
createOnUpdateTriggers() {
const updateOfColumns = this.buildUpdateOfColumns();
if (updateOfColumns.length === 0) {
return [];
}
const selects = this.context.groupBySelectsForUpdateByLevel();
return selects.map(select => {
const triggerName = this.context.generateOrderedTriggerName(select.columns, "bef_upd");
return {
trigger: this.createDatabaseTrigger({
name: triggerName,
before: true,
update: true,
updateOf: this.buildUpdateOfColumns()
}),
procedure: this.createDatabaseFunction(buildSelfUpdateBySelfRowBody_1.buildSelfUpdateBySelfRowBody(this.conditions.noChanges(), this.buildSelectValues()), triggerName)
};
});
}
createOnInsertTriggers() {
const selects = this.context.groupBySelectsForUpdateByLevel();
return selects.map(select => {
const triggerName = this.context.generateOrderedTriggerName(select.columns, "bef_ins");
return {
trigger: this.createDatabaseTrigger({
name: triggerName,
before: true,
insert: true,
}),
procedure: this.createDatabaseFunction(buildSelfAssignBeforeInsertSelfColumnBody_1.buildSelfAssignBeforeInsertSelfColumnBody(select.columns), triggerName)
};
});
}
buildSelectValues() {
const columns = this.context.createSelectForUpdateNewRow().columns;
return columns.sort((columnA, columnB) => this.context.getDependencyLevel(columnA.name) -
this.context.getDependencyLevel(columnB.name));
}
}
exports.SelfUpdateBySelfRowTriggerBuilder = SelfUpdateBySelfRowTriggerBuilder;
//# sourceMappingURL=SelfUpdateBySelfRowTriggerBuilder.js.map