ddl-manager
Version:
store postgres procedures and triggers in files
39 lines • 1.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ColumnReferenceParser = void 0;
const psql_lang_1 = require("psql-lang");
const ast_1 = require("../ast");
const CacheSyntax_1 = require("./CacheSyntax");
const assert_1 = require("assert");
const utils_1 = require("./utils");
class ColumnReferenceParser {
parse(columnLink) {
const columnName = columnLink.last().toValue();
const tableReference = this.findTableReference(columnLink);
return new ast_1.ColumnReference(tableReference, columnName);
}
findTableReference(columnLink) {
const isStar = (columnLink.row.allColumns &&
columnLink.row.column.length === 0);
if (isStar) {
return this.findFirstFrom(columnLink);
}
const fromItem = columnLink.findDeclaration();
if (fromItem) {
return utils_1.parseFromTable(fromItem.row.table, fromItem.row.as);
}
if (columnLink.row.column.length === 1) {
return this.findFirstFrom(columnLink);
}
const cache = columnLink.findParentInstance(CacheSyntax_1.CacheSyntax);
assert_1.strict.ok(cache, `source for column ${columnLink} not found`);
return utils_1.parseFromTable(cache.row.for, cache.row.as);
}
findFirstFrom(columnLink) {
const select = columnLink.findParentInstance(psql_lang_1.Select);
const fromItem = select.row.from[0];
return utils_1.parseFromTable(fromItem.row.table, fromItem.row.as);
}
}
exports.ColumnReferenceParser = ColumnReferenceParser;
//# sourceMappingURL=ColumnReferenceParser.js.map