ddl-manager
Version:
store postgres procedures and triggers in files
80 lines • 2.73 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CacheColumn = void 0;
const ast_1 = require("../../ast");
const lodash_1 = require("lodash");
class CacheColumn {
constructor(params) {
this.for = params.for;
this.name = params.name;
this.cache = params.cache;
this.select = params.select;
this.dependencies = [];
this.usedInColumns = [];
}
isRoot() {
return (this.findCircularUses().length >= this.dependencies.length);
}
findCircularUses() {
// TODO: many levels of circular dependency
return this.usedInColumns.filter(dependencyColumn => this.dependencies.includes(dependencyColumn));
}
findNotCircularUses() {
// TODO: many levels of circular dependency
return this.usedInColumns.filter(dependencyColumn => !this.dependencies.includes(dependencyColumn));
}
getColumnRefs() {
return this.select.getAllColumnReferences()
.filter(columnRef => !this.isRef(columnRef));
}
hasForeignTablesDeps() {
return this.getColumnRefs().some(columnRef => !columnRef.tableReference.equal(this.for));
}
getSchemaName() {
return this.getTableId().split(".")[0];
}
getTableName() {
return this.getTableId().split(".")[1];
}
getId() {
return `${this.getTableId()}.${this.name}`;
}
getTableId() {
return this.for.table.toString();
}
assignDependencies(dependencyColumns) {
// assign uses
for (const dependencyColumn of dependencyColumns) {
dependencyColumn.usedInColumns.push(this);
dependencyColumn.usedInColumns = lodash_1.uniqBy(dependencyColumn.usedInColumns, (column) => column.getId());
}
// assign self dependencies
this.dependencies.push(...dependencyColumns);
this.dependencies = lodash_1.uniqBy(this.dependencies, (column) => column.getId());
}
replaceExpression(newExpression) {
return new CacheColumn({
for: this.for,
name: this.name,
cache: this.cache,
select: this.select.clone({
columns: [new ast_1.SelectColumn({
name: this.name,
expression: newExpression
})]
})
});
}
getColumnExpression() {
return this.select.columns[0].expression;
}
toString() {
return `${this.for.getIdentifier()}.${this.name}`;
}
isRef(ref) {
return (ref.name === this.name &&
ref.tableReference.equal(this.for));
}
}
exports.CacheColumn = CacheColumn;
//# sourceMappingURL=CacheColumn.js.map