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
TypeScript
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;