UNPKG

rawsql-ts

Version:

High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.

93 lines (92 loc) 3.41 kB
import { SelectQuery, SimpleSelectQuery } from "../models/SelectQuery"; import { SqlComponentFormatOptions } from "./SqlComponentFormatter"; export type PredicateReachabilityInput = string | SelectQuery | SimpleSelectQuery; export interface PredicateReachabilityOptions extends SqlComponentFormatOptions { cloneInput?: boolean; } export interface PredicateReachabilityWarning { code: string; message: string; detail?: unknown; } export interface PredicateReachabilityError { code: string; message: string; detail?: unknown; } export type PredicateReachabilityMode = "rewrite_safe" | "debug_only"; export type PredicateReachabilityRelation = "origin" | "direct_output" | "join_equivalence"; export type PredicateReachabilityProbeKind = "count" | "sample"; export interface PredicateReachabilityScopeTarget { kind: "scope" | "cte" | "table" | "subquery" | "source"; name: string; } export interface PredicateReachabilityTarget { scopeId: string; relation: PredicateReachabilityRelation; mode: PredicateReachabilityMode; predicateSql: string; targetPredicateSql?: string; via?: readonly string[]; } export interface PredicateReachabilityBlocked { scopeId: string; relation: PredicateReachabilityRelation; code: string; reason: string; via?: readonly string[]; } export interface PredicateReachabilityProbeTarget { scopeId: string; relation: PredicateReachabilityRelation; mode: PredicateReachabilityMode; predicateSql: string; targetPredicateSql?: string; target: PredicateReachabilityScopeTarget; probeKinds: readonly PredicateReachabilityProbeKind[]; caution?: string; } export interface PredicateReachabilityPredicate { predicateSql: string; originScopeId: string; columnReferences: readonly string[]; reaches: readonly PredicateReachabilityTarget[]; blocked: readonly PredicateReachabilityBlocked[]; probeTargets: readonly PredicateReachabilityProbeTarget[]; } export interface PredicateReachabilitySafety { mode: "debug_only"; sqlRewritten: false; } export interface PredicateReachabilityResult { ok: boolean; query: SelectQuery | null; predicates: readonly PredicateReachabilityPredicate[]; warnings: readonly PredicateReachabilityWarning[]; errors: readonly PredicateReachabilityError[]; safety: PredicateReachabilitySafety; } export declare class PredicateReachabilityAnalyzer { analyze(input: PredicateReachabilityInput, options?: PredicateReachabilityOptions): PredicateReachabilityResult; private analyzeScope; private buildProbeTargets; private describeScopeTarget; private resolveDirectOutputReach; private resolveJoinEquivalenceReach; private collectJoinEqualities; private resolveSourceQuery; private resolveDirectOutputColumn; private collectSelectOutputs; private findCte; private resolveSourceBinding; private resolveSourceBindingFromList; private getSourceBindings; private scopeIdForBinding; private isInnerJoin; private isLeftJoinPreservedToNullableReach; private rebasePredicateToSourceQuery; private rebasePredicate; private collectOuterColumnReferences; private buildResult; } export declare const analyzePredicateReachability: (input: PredicateReachabilityInput, options?: PredicateReachabilityOptions) => PredicateReachabilityResult;