ts-sql
Version:
An SQL builder in Typescript. This project is heavily inspired by [XQL](/extjs/xql). A big shout out to @exjs and @kobalicek for this amazing project.
47 lines (46 loc) • 2.43 kB
TypeScript
import { AstSymbol, SymbolTable } from "jsymbol";
import * as ast from "./astsql";
import { QueryContext, QueryVisitor, ContextBuilder } from "./queryVisitor";
export declare enum SymbolState {
Resolved = 0,
Unresolved = 1,
}
export declare class SqlAstSymbol implements AstSymbol<ast.SqlSymbolType> {
identifier: string;
type: ast.SqlSymbolType;
state: SymbolState;
parent?: SqlAstSymbol;
constructor(identifier: string, type: ast.SqlSymbolType);
toString(): string;
}
export declare class ValidationContext implements QueryContext {
currentNode: ast.SqlAstNode;
parentNode?: ast.SqlAstNode;
symbolTable: SymbolTable<SqlAstSymbol>;
collectedSymbols: SqlAstSymbol[];
constructor(currentNode: ast.SqlAstNode);
}
export interface ValidationMethod<TNode extends ast.SqlAstNode = ast.SqlAstNode> {
(context: ValidationContext, node: TNode): ValidationContext;
}
export declare class QueryValidator extends QueryVisitor<ValidationContext> {
constructor(dialect: ast.SqlDialect, query: ast.SqlRoot, contextBuilder?: ContextBuilder);
validate(): SqlAstSymbol[];
protected visitSelectStatement: ValidationMethod<ast.SelectStatement>;
protected visitQueryExpression: ValidationMethod<ast.QueryExpression>;
protected visitTableSpec: ValidationMethod<ast.TableSpec>;
protected visitAllColumns: ValidationMethod<ast.AllColumns>;
protected visitColumnName: ValidationMethod<ast.ColumnName>;
protected visitSimpleFunctionCall: ValidationMethod<ast.SimpleFunctionCall>;
protected visitAssignedTerm: ValidationMethod<ast.AssignedTerm<ast.SqlAstNode>>;
protected visitAssignedExpressionAtom: ValidationMethod<ast.AssignedExpressionAtom>;
protected visitVariable: ValidationMethod<ast.Variable>;
protected visitSelectIntoFieldsExpression: ValidationMethod<ast.SelectIntoFieldsExpression>;
protected visitAliasedTerm: ValidationMethod<ast.AliasedTerm<ast.SqlAstNode>>;
protected addResolvedSymbol(context: ValidationContext, name: string, type: ast.SqlSymbolType): SqlAstSymbol;
protected lookupOrAddTable(context: ValidationContext, name: string): SqlAstSymbol;
protected lookupOrAddSymbol(context: ValidationContext, name: string, type: ast.SqlSymbolType): SqlAstSymbol;
}
export declare class MySQLQueryValidator extends QueryValidator {
constructor(query: ast.SqlRoot);
}