UNPKG

rhombic

Version:

SQL parsing, lineage extraction and manipulation

75 lines 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LineageVisitor = void 0; const QueryStructureVisitor_1 = require("./QueryStructureVisitor"); /** * Visitor extending #QueryStructureVisitor and implementing #onRelation() and #onColumnReference() * to build column-based SQL lineage. */ class LineageVisitor extends QueryStructureVisitor_1.QueryStructureVisitor { constructor(getTable, options) { super(getTable, options); /** Collected relations (tables). */ this.tables = []; /** Collected references (edges). */ this.edges = []; } // // Overrides // onColumnReference(tableId, columnId) { this.edges.push({ type: "edge", edgeType: this.currentRelation.currentClause, source: { tableId: tableId, columnId: columnId }, target: { tableId: this.currentRelation.id, columnId: this.currentRelation.currentColumnId } }); } onRelation(relation, alias) { let label = alias !== null && alias !== void 0 ? alias : relation.id; const columns = relation.columns.map(c => { return { id: c.id, label: c.label, range: c.range, data: c.data, isAssumed: c.isAssumed }; }); let tablePrimary; if (relation instanceof QueryStructureVisitor_1.TableRelation) { label = alias !== undefined && alias != relation.tablePrimary.tableName ? relation.tablePrimary.tableName + " -> " + alias : relation.tablePrimary.tableName; tablePrimary = relation.tablePrimary; } this.tables.push({ tablePrimary, table: { type: "table", id: relation.id, label: label, range: relation.range, data: relation instanceof QueryStructureVisitor_1.TableRelation ? relation.data : undefined, isSourceOnly: relation instanceof QueryStructureVisitor_1.TableRelation ? true : undefined, columns: columns } }); } defaultResult() { return; } // eslint-disable-next-line @typescript-eslint/no-unused-vars aggregateResult(_aggregate, _nextResult) { return; } } exports.LineageVisitor = LineageVisitor; //# sourceMappingURL=LineageVisitor.js.map