UNPKG

rawsql-ts

Version:

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

118 lines (117 loc) 4.53 kB
import { SelectQuery, SimpleSelectQuery } from "../models/SelectQuery"; import { SqlComponentFormatOptions } from "./SqlComponentFormatter"; export type StaticPredicatePlacementInput = string | SelectQuery | SimpleSelectQuery; /** * Safe-only placement for parameter-free static predicates. * * The optimizer only moves top-level AND terms whose outer column references can * be mechanically rebased to direct outputs of a single-use simple CTE or * derived table. Unsupported or ambiguous predicates stay in place. */ export interface StaticPredicatePlacementOptions extends SqlComponentFormatOptions { dryRun?: boolean; /** * Whether AST/model inputs should be cloned before optimization. * Defaults to true for public-call safety. Internal pipelines can pass false * when they own the model and want to avoid AST -> SQL -> AST round trips. */ cloneInput?: boolean; } export interface StaticPredicatePlacementWarning { code: string; message: string; detail?: unknown; } export interface StaticPredicatePlacementError { code: string; message: string; detail?: unknown; } export interface StaticPredicateMove { kind: "move_static_predicate"; predicateSql: string; fromScopeId: string; toScopeId: string; reason: string; columnReferences: readonly string[]; } export interface StaticPredicateSkipped { predicateSql: string; scopeId: string; reason: string; code: string; } export interface StaticPredicatePlacementSafety { mode: "safe_only"; unsafeRewriteApplied: false; dryRun: boolean; formatterGeneratedSource: boolean; } export interface StaticPredicatePlacementResult { ok: boolean; sql: string; query: SelectQuery | null; applied: readonly StaticPredicateMove[]; skipped: readonly StaticPredicateSkipped[]; warnings: readonly StaticPredicatePlacementWarning[]; errors: readonly StaticPredicatePlacementError[]; safety: StaticPredicatePlacementSafety; staticPredicateMoves: readonly StaticPredicateMove[]; } export declare class StaticPredicatePlacementOptimizer { plan(input: StaticPredicatePlacementInput, options?: StaticPredicatePlacementOptions): StaticPredicatePlacementResult; private placePredicatesInScopes; optimize(input: StaticPredicatePlacementInput, options?: StaticPredicatePlacementOptions): StaticPredicatePlacementResult; private parseInput; private analyzeCandidate; private isExistsPredicate; private findUnsupportedExpression; private resolveTarget; private findRootQueryBoundary; private resolveTargetPlacement; private findNullableSideBoundaryForTargetColumns; private resolveSourceBinding; private resolveUpstreamQuery; private resolveUnionTarget; private resolveTargetColumns; private resolveBaseTableJoinOnTarget; private appendJoinOnPredicate; private resolveDeepestBranchTarget; private verifyColumnResolvableInQuery; private isGroupKeyColumn; private sameResolvableColumnInQuery; private resolveColumnSourceAlias; private rebasePredicate; private getSourceBindings; private isBaseTableBinding; private isInnerJoin; private findNullableSideBoundary; private hasLaterJoinThatNullsPriorSources; private hasOuterJoin; private hasDistinctOnBoundary; private hasOrdinaryDistinct; private getOutputColumnMatchCount; private collectUnionBranches; private resolveUnionOutputIndex; private resolveTargetColumnByOutputIndex; private collectSelectOutputs; private collectDirectOutputMatches; private hasExplicitOutputMatch; private inferWildcardOutputMatches; private inferWildcardTargetColumn; private resolveWildcardColumnFromBinding; private collectSourceOutputMatches; private createColumnForBinding; private createInferredOutputColumn; private resolveSourceQueryForColumns; private findCte; private countTableSourceReferences; private collectSourceAliases; private collectRootColumnReferences; private hasWindowUsage; private collectParameterNames; private makeSkipped; private buildResult; } export declare const planStaticPredicatePlacement: (input: StaticPredicatePlacementInput, options?: StaticPredicatePlacementOptions) => StaticPredicatePlacementResult; export declare const optimizeStaticPredicatePlacement: (input: StaticPredicatePlacementInput, options?: StaticPredicatePlacementOptions) => StaticPredicatePlacementResult;