UNPKG

flink-sql-language-server

Version:

A LSP-based language server for Apache Flink SQL

137 lines (136 loc) 6.68 kB
import { ParserRuleContext } from 'antlr4ts/ParserRuleContext'; import { AbstractParseTreeVisitor } from 'antlr4ts/tree'; import { Range } from 'vscode-languageserver-textdocument'; import { ColumnReferenceContext, ComparisonContext, CreateTableContext, CreateViewContext, DefineValuesContext, DereferenceContext, ExistsContext, FromTableContext, FunctionCallContext, GroupByContext, HavingContext, InsertContext, JoinConditionContext, OrderByContext, PredicateContext, ProjectItemContext, QueryContext, QueryPrimaryContext, SelectClauseContext, SelectContext, StarContext, StatementContext, SubQueryContext, TableReferenceContext, UseContext, WhereContext, WithItemContext } from '../lib/FlinkSQLParser'; import { FlinkSQLParserVisitor } from '../lib/FlinkSQLParserVisitor'; import { EdgeIdentity, EdgeType, MetadataProviderFn, RelationPrimary, RelationType } from '../lineage.typing'; export declare const STAR_LABEL = "*"; export declare const COUNT_STAR_LABEL = "COUNT(*)"; export interface ColumnRef { tableId: string; columnId: string; isAssumed: boolean; } export declare class Column { readonly id: string; label: string; range?: Range | undefined; readonly data?: unknown; readonly isAssumed?: boolean | undefined; readonly columnReferences: ColumnRef[]; constructor(id: string, label: string, range?: Range | undefined, data?: unknown, isAssumed?: boolean | undefined); } export declare abstract class Relation { readonly id: string; readonly columns: Column[]; readonly parent?: Relation | undefined; readonly range?: Range | undefined; protected constructor(id: string, columns: Column[], parent?: Relation | undefined, range?: Range | undefined); abstract getNextColumnId(): string; findColumn(columnName: string): Column | undefined; resolveColumn(columnName: string): ColumnRef | undefined; } export declare class TableRelation extends Relation { readonly tablePrimary: RelationPrimary; constructor(id: string, tablePrimary: RelationPrimary, columns: Column[], parent?: QueryRelation, range?: Range); getNextColumnId(): string; addColumn(columnName: string, range: Range | undefined, isAssumed: boolean): { column: Column; ref: ColumnRef; }; } export declare class QueryRelation extends Relation { ctes: Map<string, QueryRelation>; relations: Map<string, Relation>; columnIdSeq: number; currentClause?: EdgeType; currentColumnId?: string; columnReferences: ColumnRef[]; constructor(id: string, parent?: QueryRelation, range?: Range); getNextColumnId(): string; findLocalRelation(tableName: string): Relation | undefined; findRelation(name: string): Relation | undefined; findCTE(tableName: string): Relation | undefined; getCTENames(): string[]; resolveRelationColumnWithTableName(columnName: string, range: Range, relation: Relation): ColumnRef | undefined; resolveRelationColumn(columnName: string, range: Range): ColumnRef | undefined; } export declare class InsertRelation extends Relation { readonly tablePrimary?: RelationPrimary | undefined; constructor(id: string, range?: Range, tablePrimary?: RelationPrimary | undefined); columnIdSeq: number; columnsSpecified: boolean; sinkTableRelation?: TableRelation | ViewRelation; getNextColumnId(): string; } export declare class ViewRelation extends Relation { readonly tablePrimary: RelationPrimary; constructor(id: string, tablePrimary: RelationPrimary, range?: Range); columnIdSeq: number; columnsSpecified: boolean; getNextColumnId(): string; } export declare abstract class FlinkSQLRelationVisitor<Result> extends AbstractParseTreeVisitor<Result> implements FlinkSQLParserVisitor<Result> { private getTable?; private relationInsertSeq; private relationViewSeq; private relationSeq; relationDDLColumns: Map<string, Column[]>; tableDDLs: Map<string, TableRelation>; viewDDLs: Map<string, ViewRelation>; catalogUsed?: string; databaseUsed?: string; lastQueryRelation: QueryRelation | undefined; protected currentInsertRelation?: InsertRelation; protected currentViewRelation?: ViewRelation; protected currentQueryRelation?: QueryRelation; abstract onRelation(_relation: TableRelation | ViewRelation | QueryRelation | InsertRelation, _alias?: string): void; abstract onColumnReference(_source: EdgeIdentity, _target: EdgeIdentity, _currentClause?: EdgeType): void; protected constructor(getTable?: MetadataProviderFn | undefined); getNextInsertRelationId(): string; getNextViewRelationId(): string; getNextRelationId(): string; private processClause; private reportTableReferences; private isStar; private handleSubQueryRelation; private addStarRelationColumn; private mapColumnToRelation; protected deriveColumnNameFromContext(ctx: ParserRuleContext): ExprColumn[]; protected deriveColumnsFromDDL(ctx: DefineValuesContext): ExprColumn[]; protected relationPrimaryFromMultipart(names: string[], type: RelationType): RelationPrimary; visitStatement(ctx: StatementContext): Result; visitUse(ctx: UseContext): Result; visitCreateTable(ctx: CreateTableContext): Result; visitCreateView(ctx: CreateViewContext): Result; visitInsert(ctx: InsertContext): Result; visitQuery(ctx: QueryContext): Result; visitQueryPrimary(ctx: QueryPrimaryContext): Result; visitSelect(ctx: SelectContext): Result; visitJoinCondition(ctx: JoinConditionContext): Result; visitTableReference(ctx: TableReferenceContext): Result; visitProjectItem(ctx: ProjectItemContext): Result; visitColumnReference(ctx: ColumnReferenceContext): Result; visitDereference(ctx: DereferenceContext): Result; visitFunctionCall(ctx: FunctionCallContext): Result; visitStar(ctx: StarContext): Result; visitComparison(ctx: ComparisonContext): Result; visitExists(ctx: ExistsContext): Result; visitPredicate(ctx: PredicateContext): Result; visitSubQuery(ctx: SubQueryContext): Result; visitWithItem(ctx: WithItemContext): Result; visitSelectClause(ctx: SelectClauseContext): Result; visitFromTable(ctx: FromTableContext): Result; visitWhere(ctx: WhereContext): Result; visitGroupBy(ctx: GroupByContext): Result; visitHaving(ctx: HavingContext): Result; visitOrderBy(ctx: OrderByContext): Result; } interface ExprColumn { tableName?: string; columnName: string; range?: Range; } export declare const RELATION_SEPARATOR = "__F__"; export declare function relationPrimaryToString(relationPrimary: RelationPrimary): string; export {};