rawsql-ts
Version:
High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.
54 lines (53 loc) • 2.06 kB
TypeScript
import { CTEQuery } from "../models/Clause";
import { SqlComponent } from "../models/SqlComponent";
/**
* Source span for a named query definition when parser position metadata is available.
*
* @remarks The current extractor does not synthesize ranges. `range` and `nameRange`
* are returned as `null` until AST nodes expose reliable definition spans.
*/
export interface NamedQueryDefinitionSourceRange {
start: number;
end: number;
}
/**
* DTO-style representation of a named query definition from a SQL AST.
*/
export interface NamedQueryDefinition {
/** The stable definition name, such as a CTE alias. */
name: string;
/** The AST query node that defines the named query. */
query: CTEQuery;
/** Whether the definition belongs to a `WITH RECURSIVE` clause, when that context is available. */
recursive?: boolean;
/** Full definition source range when available. Currently `null`. */
range: NamedQueryDefinitionSourceRange | null;
/** Definition-name source range when available. Currently `null`. */
nameRange: NamedQueryDefinitionSourceRange | null;
}
/**
* Extracts named query definitions, starting with CTE definitions from `WITH` clauses.
*
* @remarks Definitions are emitted in SQL source order. For nested CTEs, the outer
* CTE definition is emitted when its name is encountered, then definitions inside
* that CTE body are emitted before later sibling CTE definitions.
*/
export declare class NamedQueryDefinitionExtractor {
private readonly definitions;
private readonly visited;
/**
* Extract named query definitions from an AST component.
*/
static extract(input: SqlComponent | null | undefined): NamedQueryDefinition[];
private visit;
private visitSelectQuery;
private visitSimpleSelectQuery;
private visitInsertQuery;
private visitUpdateQuery;
private visitDeleteQuery;
private visitMergeQuery;
private visitWithClause;
private visitCommonTable;
private visitKnownSqlComponent;
private visitKnownValueComponent;
}