UNPKG

ddl-manager

Version:

store postgres procedures and triggers in files

80 lines 2.73 kB
"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