ddl-manager
Version:
store postgres procedures and triggers in files
78 lines (66 loc) • 1.91 kB
text/typescript
import { Column } from "./Column";
import { TableID } from "./TableID";
import { DatabaseTrigger } from "./DatabaseTrigger";
import { Index } from "./Index";
export class Table extends TableID {
readonly columns: Column[];
readonly triggers: DatabaseTrigger[];
readonly indexes: Index[];
constructor(
schema: string,
name: string,
columns: Column[] = [],
triggers: DatabaseTrigger[] = [],
indexes: Index[] = []
) {
super(schema, name);
this.columns = columns;
this.triggers = triggers;
this.indexes = indexes;
}
getColumn(name: string) {
return this.columns.find(column =>
column.equalName(name)
);
}
addColumn(column: Column) {
this.columns.push(column);
}
addTrigger(trigger: DatabaseTrigger) {
this.triggers.push(trigger);
}
addIndex(index: Index) {
this.indexes.push(index);
}
getTrigger(triggerName: string) {
return this.triggers.find(trigger =>
trigger.name === triggerName
);
}
removeTrigger(dropTrigger: DatabaseTrigger) {
const triggerIndex = this.triggers.findIndex(existentTrigger =>
existentTrigger.equal(dropTrigger)
);
if ( triggerIndex !== -1 ) {
this.triggers.splice(triggerIndex, 1);
}
}
removeColumn(dropColumn: Column) {
const columnIndex = this.columns.findIndex(existentColumn =>
existentColumn.equalName(dropColumn)
);
if ( columnIndex !== -1 ) {
this.columns.splice(columnIndex, 1);
}
}
clone() {
const clone = new Table(
this.schema,
this.name,
this.columns.map(column =>
column.clone()
)
);
return clone;
}
}