UNPKG

ddl-manager

Version:

store postgres procedures and triggers in files

39 lines 1.64 kB
"use strict"; 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