import { SelectQuery, SimpleSelectQuery } from "../models/SelectQuery"; import { type ValueComponent } from "../models/ValueComponent"; import { type SupportedOptionalConditionBranch } from "./PruneOptionalConditionBranches"; export type SSSQLFilterValue = unknown; export type SSSQLFilterInput = Record; export type SssqlScaffoldFilters = SSSQLFilterInput; export type SssqlScalarOperator = "=" | "<>" | "<" | "<=" | ">" | ">=" | "like" | "ilike"; export type SssqlScalarOperatorInput = SssqlScalarOperator | "!="; export type SssqlBranchKind = "scalar" | "exists" | "not-exists" | "expression"; export interface SssqlTransformResult { query: SelectQuery; } export type SssqlRewriteEditKind = "insert" | "replace" | "delete"; export interface SssqlRewriteEdit { start: number; end: number; before: string; after: string; kind: SssqlRewriteEditKind; reason?: string; target?: SssqlRewriteEditTarget; } export interface SssqlRewriteEditTarget { branchKind: SssqlBranchKind; parameterName: string; column?: string; } export type SssqlRewriteChangedRegionKind = "target-branch" | "where-keyword" | "boolean-operator" | "parentheses" | "formatter-rewrite" | "comment" | "unknown"; export interface SssqlRewriteChangedRegion { kind: SssqlRewriteChangedRegionKind; start: number; end: number; message?: string; } export interface SssqlRewritePlanWarning { code: string; message: string; detail?: unknown; } export interface SssqlRewritePlanError { code: string; message: string; detail?: unknown; } export interface SssqlRewriteSafety { tokenCountBefore: number; tokenCountAfter: number; tokenSequencePreserved: boolean; commentsPreserved: boolean; changedOnlyTargetBranches: boolean; changedRegions: readonly SssqlRewriteChangedRegion[]; } export interface SssqlRewritePlan { ok: boolean; requiresFullReformat: boolean; edits: readonly SssqlRewriteEdit[]; sql?: string; safety: SssqlRewriteSafety; warnings: readonly SssqlRewritePlanWarning[]; errors: readonly SssqlRewritePlanError[]; } export interface SssqlBranchInfo { parameterName: string; kind: SssqlBranchKind; operator?: SssqlScalarOperator; target?: string; query: SimpleSelectQuery; expression: ValueComponent; sql: string; } export interface SssqlScalarScaffoldSpec { kind?: "scalar"; target: string; parameterName?: string; operator?: SssqlScalarOperatorInput; } export interface SssqlExistsScaffoldSpec { kind: "exists" | "not-exists"; parameterName: string; query: string; anchorColumns: string[]; } export type SssqlScaffoldSpec = SssqlScalarScaffoldSpec | SssqlExistsScaffoldSpec; export interface SssqlRemoveSpec { parameterName: string; kind?: SssqlBranchKind; operator?: SssqlScalarOperatorInput; target?: string; } /** * Builds and refreshes truthful SSSQL optional filter branches. * Runtime callers should use pruning, not dynamic predicate injection. */ export declare class SSSQLFilterBuilder { private readonly tableColumnResolver?; private readonly finder; constructor(tableColumnResolver?: ((tableName: string) => string[]) | undefined); list(query: SelectQuery | string): SssqlBranchInfo[]; planScaffold(query: SelectQuery | string, filters: SSSQLFilterInput): SssqlRewritePlan; dryRunScaffold(query: SelectQuery | string, filters: SSSQLFilterInput): SssqlRewritePlan; planScaffoldBranch(query: SelectQuery | string, spec: SssqlScaffoldSpec): SssqlRewritePlan; dryRunScaffoldBranch(query: SelectQuery | string, spec: SssqlScaffoldSpec): SssqlRewritePlan; planRefresh(query: SelectQuery | string, filters: SSSQLFilterInput): SssqlRewritePlan; dryRunRefresh(query: SelectQuery | string, filters: SSSQLFilterInput): SssqlRewritePlan; planRemove(query: SelectQuery | string, spec: SssqlRemoveSpec): SssqlRewritePlan; dryRunRemove(query: SelectQuery | string, spec: SssqlRemoveSpec): SssqlRewritePlan; planRemoveAll(query: SelectQuery | string): SssqlRewritePlan; dryRunRemoveAll(query: SelectQuery | string): SssqlRewritePlan; scaffold(query: SelectQuery | string, filters: SSSQLFilterInput): SelectQuery; scaffoldBranch(query: SelectQuery | string, spec: SssqlScaffoldSpec): SelectQuery; refresh(query: SelectQuery | string, filters: SSSQLFilterInput): SelectQuery; private refreshParsed; remove(query: SelectQuery | string, spec: SssqlRemoveSpec): SelectQuery; removeAll(query: SelectQuery | string): SelectQuery; private parseQuery; private planScalarInsert; private planExistsInsert; private buildMinimalInsertPlan; private planBranchRemoval; private buildPlanFromEdits; private planRewrite; private findMatchingBranchInfos; private scaffoldScalarBranch; private scaffoldExistsBranch; private resolveTarget; private resolveTargetInQuery; private resolveQualifiedTarget; private resolveUnqualifiedTarget; private tryResolveTarget; private findAliasForTable; private resolveAliasForSource; private buildCorrelatedRefreshPlan; private collectSourceAliases; private resolveCorrelatedAnchorTarget; private findSourceExpressionByAlias; private resolveSourceExpressionToUpstreamQuery; private resolveAnchorTargetInQuery; private getSourceAlias; private rebaseMovedBranch; private rebaseMovedBranchByAlias; } export type { SupportedOptionalConditionBranch }; export declare const scaffoldSssqlQuery: (sqlContent: string, filters: SssqlScaffoldFilters) => SssqlTransformResult; export declare const refreshSssqlQuery: (sqlContent: string, filters: SssqlScaffoldFilters) => SssqlTransformResult;