import { Range } from 'vscode-languageserver-textdocument';
export interface Lineage<TableData, ColumnData> {
    nodes: Array<Table<TableData, ColumnData>>;
    edges: Edge[];
}
export interface TableModifier {
    type: 'filter' | 'groupBy';
    range: Range;
}
export interface Table<TableData, ColumnData> {
    type: 'table';
    id: string;
    label: string;
    range?: Range;
    data?: TableData;
    isSourceOnly?: boolean;
    isTargetOnly?: boolean;
    columns: Array<Column<ColumnData>>;
    modifiers?: TableModifier[];
}
export declare type EdgeType = 'select' | 'from' | 'where' | 'group by' | 'order by' | 'having';
export interface Edge {
    type: 'edge';
    label?: string;
    source: {
        tableId: string;
        columnId?: string;
    };
    target: {
        tableId: string;
        columnId?: string;
    };
    edgeType?: EdgeType;
}
export interface Column<ColumnData> {
    id: string;
    label: string;
    isAssumed?: boolean;
    range?: Range;
    data?: ColumnData;
}
export interface TablePrimary {
    catalogName?: string;
    schemaName?: string;
    tableName: string;
    alias?: string;
    range?: Range;
}
