@secam/pgsql-ast-parser
Version:
Fork of pgsql-ast-parser Simple Postgres SQL parser/modifier for pg-mem
237 lines • 14 kB
TypeScript
import * as a from './syntax/ast';
import { nil } from './utils';
export interface IAstPartialMapper {
statement?: (val: a.Statement) => a.Statement | nil;
update?: (val: a.UpdateStatement) => a.Statement | nil;
insert?: (val: a.InsertStatement) => a.Statement | nil;
delete?: (val: a.DeleteStatement) => a.Statement | nil;
comment?: (val: a.CommentStatement) => a.Statement | nil;
do?: (val: a.DoStatement) => a.Statement | nil;
createFunction?: (val: a.CreateFunctionStatement) => a.Statement | nil;
dropFunction?: (val: a.DropFunctionStatement) => a.Statement | nil;
raise?: (val: a.RaiseStatement) => a.Statement | nil;
createSchema?: (val: a.CreateSchemaStatement) => a.Statement | nil;
createEnum?(val: a.CreateEnumType): a.Statement | nil;
alterEnum?(val: a.AlterEnumType): a.Statement | nil;
createCompositeType?(val: a.CreateCompositeType): a.Statement | nil;
drop?: (val: a.DropStatement) => a.Statement | nil;
show?: (val: a.ShowStatement) => a.Statement | nil;
createTable?: (val: a.CreateTableStatement) => a.Statement | nil;
truncateTable?: (val: a.TruncateTableStatement) => a.Statement | nil;
createExtension?: (val: a.CreateExtensionStatement) => a.Statement | nil;
set?: (st: a.SetStatement) => a.SetStatement | nil;
dataType?: (dataType: a.DataTypeDef) => a.DataTypeDef;
prepare?: (st: a.PrepareStatement) => a.Statement | nil;
deallocate?: (st: a.DeallocateStatement) => a.Statement | nil;
parameter?: (st: a.ExprParameter) => a.Expr | nil;
tableRef?: (st: a.QNameAliased) => a.QNameAliased | nil;
transaction?: (val: a.CommitStatement | a.RollbackStatement | a.StartTransactionStatement) => a.Statement | nil;
createIndex?: (val: a.CreateIndexStatement) => a.Statement | nil;
alterTable?: (st: a.AlterTableStatement) => a.Statement | nil;
alterIndex?: (st: a.AlterIndexStatement) => a.Statement | nil;
tableAlteration?: (change: a.TableAlteration, table: a.QNameAliased) => a.TableAlteration | nil;
dropColumn?: (change: a.TableAlterationDropColumn, table: a.QNameAliased) => a.TableAlteration | nil;
dropConstraint?: (change: a.TableAlterationDropConstraint, table: a.QNameAliased) => a.TableAlteration | nil;
renameConstraint?: (change: a.TableAlterationRenameConstraint, table: a.QNameAliased) => a.TableAlteration | nil;
setTableOwner?: (change: a.TableAlterationOwner, table: a.QNameAliased) => a.TableAlteration | nil;
renameColumn?: (change: a.TableAlterationRenameColumn, table: a.QNameAliased) => a.TableAlteration | nil;
renameTable?: (change: a.TableAlterationRename, table: a.QNameAliased) => a.TableAlteration | nil;
alterColumn?: (change: a.TableAlterationAlterColumn, inTable: a.QNameAliased) => a.TableAlteration | nil;
setColumnType?: (alter: a.AlterColumnSetType, inTable: a.QName, inColumn: a.Name) => a.AlterColumn | nil;
alterColumnSimple?: (alter: a.AlterColumnSimple, inTable: a.QName, inColumn: a.Name) => a.AlterColumn | nil;
alterColumnAddGenerated?: (alter: a.AlterColumnAddGenerated, inTable: a.QName, inColumn: a.Name) => a.AlterColumn | nil;
setColumnDefault?: (alter: a.AlterColumnSetDefault, inTable: a.QName, inColumn: a.Name) => a.AlterColumn | nil;
addConstraint?: (change: a.TableAlterationAddConstraint, inTable: a.QName) => a.TableAlteration | nil;
addColumn?: (change: a.TableAlterationAddColumn, inTable: a.QName) => a.TableAlteration | nil;
createColumn?: (col: a.CreateColumnDef) => a.CreateColumnDef | nil;
likeTable?: (col: a.CreateColumnsLikeTable) => a.CreateColumnDef | a.CreateColumnsLikeTable | nil;
with?: (val: a.WithStatement) => a.SelectStatement | nil;
withRecursive?: (val: a.WithRecursiveStatement) => a.SelectStatement | nil;
union?: (val: a.SelectFromUnion) => a.SelectStatement | nil;
select?: (val: a.SelectStatement) => a.SelectStatement | nil;
selection?: (val: a.SelectFromStatement) => a.SelectStatement | nil;
createView?: (val: a.CreateViewStatement) => a.Statement | nil;
createMaterializedView?: (val: a.CreateMaterializedViewStatement) => a.Statement | nil;
refreshMaterializedView?: (val: a.RefreshMaterializedViewStatement) => a.Statement | nil;
from?: (from: a.From) => a.From | nil;
fromCall?: (from: a.FromCall) => a.From | nil;
fromStatement?: (from: a.FromStatement) => a.From | nil;
values?: (from: a.ValuesStatement) => a.SelectStatement | nil;
fromTable?: (from: a.FromTable) => a.From | nil;
selectionColumn?: (val: a.SelectedColumn) => a.SelectedColumn | nil;
expr?: (val: a.Expr) => a.Expr | nil;
ternary?: (val: a.ExprTernary) => a.Expr | nil;
arraySelect?: (val: a.ExprArrayFromSelect) => a.Expr | nil;
arrayIndex?: (val: a.ExprArrayIndex) => a.Expr | nil;
member?: (val: a.ExprMember) => a.Expr | nil;
extract?: (st: a.ExprExtract) => a.Expr | nil;
case?: (val: a.ExprCase) => a.Expr | nil;
cast?: (val: a.ExprCast) => a.Expr | nil;
call?: (val: a.ExprCall) => a.Expr | nil;
callSubstring?: (val: a.ExprSubstring) => a.Expr | nil;
callOverlay?: (val: a.ExprOverlay) => a.Expr | nil;
array?: (val: a.ExprList) => a.Expr | nil;
constant?: (value: a.ExprLiteral) => a.Expr | nil;
default?: (value: a.ExprDefault) => a.Expr | nil;
ref?: (val: a.ExprRef) => a.Expr | nil;
unary?: (val: a.ExprUnary) => a.Expr | nil;
binary?: (val: a.ExprBinary) => a.Expr | nil;
join?(join: a.JoinClause): a.JoinClause | nil;
constraint?: (constraint: a.ColumnConstraint) => a.ColumnConstraint | nil;
valueKeyword?(val: a.ExprValueKeyword): a.Expr | nil;
tablespace?(val: a.TablespaceStatement): a.Statement | nil;
setGlobal?(val: a.SetGlobalStatement): a.Statement | nil;
setTimezone?(val: a.SetTimezone): a.Statement | nil;
setNames?(val: a.SetNames): a.Statement | nil;
createSequence?(seq: a.CreateSequenceStatement): a.Statement | nil;
alterSequence?(seq: a.AlterSequenceStatement): a.Statement | nil;
begin?(begin: a.BeginStatement): a.Statement | nil;
}
export type IAstFullMapper = {
[key in keyof IAstPartialMapper]-?: IAstPartialMapper[key];
};
export type IAstMapper = IAstFullMapper & {
/** Forces the next call to use the default implementation, not yours */
super(): IAstMapper;
};
/**
* Builds an AST modifier based on the default implementation, merged with the one you provide.
*
* Example of a modifier that renames all reference to columns 'foo' to 'bar'
* ```ts
* const mapper = astMapper(b => ({
* ref: a => assignChanged(a, {
* name: a.name === 'foo'
* ? 'bar'
* : a.name
* })
* }));
*
* const modified = mapper.statement(myStatementToModify);
* ```
*/
export declare function astMapper(modifierBuilder: MapperBuilder): IAstMapper;
export type MapperBuilder = (defaultImplem: IAstMapper) => IAstPartialMapper;
type PartialNil<T> = {
[P in keyof T]?: T[P] | nil;
};
/**
* An helper function that returns a copy of an object with modified properties
* (similar to Object.assign()), but ONLY if thos properties have changed.
* Will return the original object if not.
*/
export declare function assignChanged<T>(orig: T, assign: PartialNil<T>): T;
/**
* An helper function that returns a map of an array, but:
* - It will return the original array if it is null-ish
* - It will remove all null-ish entries
* - It will return the original array if nothing has changed
*/
export declare function arrayNilMap<T extends Object>(this: void, collection: T[] | nil, mapper: (v: T) => T | nil): T[] | nil;
/**
* Can be used to modify an AST.
*
* You will have to override functions that you're interested in to use this class.
*
* Example: Will remove all references in
*/
export declare class AstDefaultMapper implements IAstMapper {
wrapped?: IAstPartialMapper;
skipNext?: boolean;
super(): SkipModifier;
statement(val: a.Statement): a.Statement | nil;
comment(val: a.CommentStatement): a.Statement | nil;
createView(val: a.CreateViewStatement): a.Statement | nil;
createMaterializedView(val: a.CreateMaterializedViewStatement): a.Statement | nil;
refreshMaterializedView(val: a.RefreshMaterializedViewStatement): a.Statement | nil;
do(val: a.DoStatement): a.Statement | nil;
createFunction(val: a.CreateFunctionStatement): a.Statement | nil;
dropFunction(val: a.DropFunctionStatement): a.Statement | nil;
show(val: a.ShowStatement): a.Statement | nil;
createEnum(val: a.CreateEnumType): a.Statement | nil;
alterEnum(val: a.AlterEnumType): a.Statement | nil;
createCompositeType(val: a.CreateCompositeType): a.Statement | nil;
drop(val: a.DropStatement): a.Statement | nil;
alterSequence(seq: a.AlterSequenceStatement): a.Statement | nil;
begin(begin: a.BeginStatement): a.Statement | nil;
createSequence(seq: a.CreateSequenceStatement): a.Statement | nil;
tablespace(val: a.TablespaceStatement): a.Statement | nil;
setGlobal(val: a.SetGlobalStatement): a.Statement | nil;
setTimezone(val: a.SetTimezone): a.Statement | nil;
setNames(val: a.SetNames): a.Statement | nil;
update(val: a.UpdateStatement): a.Statement | nil;
insert(val: a.InsertStatement): a.Statement | nil;
raise(val: a.RaiseStatement): a.Statement | nil;
delete(val: a.DeleteStatement): a.Statement | nil;
createSchema(val: a.CreateSchemaStatement): a.Statement | nil;
createTable(val: a.CreateTableStatement): a.Statement | nil;
likeTable(col: a.CreateColumnsLikeTable): a.CreateColumnDef | a.CreateColumnsLikeTable | nil;
truncateTable(val: a.TruncateTableStatement): a.Statement | nil;
constraint(c: a.ColumnConstraint): a.ColumnConstraint | nil;
set(st: a.SetStatement): a.SetStatement | nil;
/** Called when a data type definition is encountered */
dataType(dataType: a.DataTypeDef): a.DataTypeDef;
/** Called when an alias of a table is created */
tableRef(st: a.QNameAliased): a.QNameAliased | nil;
transaction(val: a.CommitStatement | a.RollbackStatement | a.StartTransactionStatement): a.Statement | nil;
createExtension(val: a.CreateExtensionStatement): a.Statement | nil;
createIndex(val: a.CreateIndexStatement): a.Statement | nil;
prepare(st: a.PrepareStatement): a.Statement | nil;
deallocate(st: a.DeallocateStatement): a.Statement | nil;
alterIndex(st: a.AlterIndexStatement): a.Statement | nil;
alterTable(st: a.AlterTableStatement): a.Statement | nil;
tableAlteration(change: a.TableAlteration, table: a.QNameAliased): a.TableAlteration | nil;
dropColumn(change: a.TableAlterationDropColumn, table: a.QNameAliased): a.TableAlteration | nil;
dropConstraint(change: a.TableAlterationDropConstraint, table: a.QNameAliased): a.TableAlteration | nil;
setTableOwner(change: a.TableAlterationOwner, table: a.QNameAliased): a.TableAlteration | nil;
renameConstraint(change: a.TableAlterationRenameConstraint, table: a.QNameAliased): a.TableAlteration | nil;
renameColumn(change: a.TableAlterationRenameColumn, table: a.QNameAliased): a.TableAlteration | nil;
renameTable(change: a.TableAlterationRename, table: a.QNameAliased): a.TableAlteration | nil;
alterColumn(change: a.TableAlterationAlterColumn, inTable: a.QNameAliased): a.TableAlteration | nil;
setColumnType(alter: a.AlterColumnSetType, inTable: a.QName, inColumn: a.Name): a.AlterColumn | nil;
alterColumnAddGenerated(alter: a.AlterColumnAddGenerated, inTable: a.QName, inColumn: a.Name): a.AlterColumn | nil;
alterColumnSimple(alter: a.AlterColumnSimple, inTable: a.QName, inColumn: a.Name): a.AlterColumn | nil;
setColumnDefault(alter: a.AlterColumnSetDefault, inTable: a.QName, inColumn: a.Name): a.AlterColumn | nil;
addConstraint(change: a.TableAlterationAddConstraint, inTable: a.QName): a.TableAlteration | nil;
addColumn(change: a.TableAlterationAddColumn, inTable: a.QName): a.TableAlteration | nil;
createColumn(col: a.CreateColumnDef): a.CreateColumnDef | nil;
select(val: a.SelectStatement): a.SelectStatement | nil;
selection(val: a.SelectFromStatement): a.SelectStatement | nil;
orderBy(orderBy: a.OrderByStatement[] | null | undefined): nil | a.OrderByStatement[];
union(val: a.SelectFromUnion): a.SelectStatement | nil;
with(val: a.WithStatement): a.SelectStatement | nil;
withRecursive(val: a.WithRecursiveStatement): a.SelectStatement | nil;
from(from: a.From): a.From | nil;
fromCall(from: a.FromCall): a.From | nil;
fromStatement(from: a.FromStatement): a.From | nil;
values(from: a.ValuesStatement): a.SelectStatement | nil;
join(join: a.JoinClause): a.JoinClause | nil;
fromTable(from: a.FromTable): a.From | nil;
selectionColumn(val: a.SelectedColumn): a.SelectedColumn | nil;
expr(val: a.Expr | nil): a.Expr | nil;
arraySelect(val: a.ExprArrayFromSelect): a.ExprArrayFromSelect | null;
extract(st: a.ExprExtract): a.Expr | nil;
valueKeyword(val: a.ExprValueKeyword): a.Expr | nil;
ternary(val: a.ExprTernary): a.Expr | nil;
parameter(st: a.ExprParameter): a.Expr | nil;
arrayIndex(val: a.ExprArrayIndex): a.Expr | nil;
member(val: a.ExprMember): a.Expr | nil;
case(val: a.ExprCase): a.Expr | nil;
cast(val: a.ExprCast): a.Expr | nil;
call(val: a.ExprCall): a.Expr | nil;
callSubstring(val: a.ExprSubstring): a.Expr | nil;
callOverlay(val: a.ExprOverlay): a.Expr | nil;
array(val: a.ExprList): a.Expr | nil;
constant(value: a.ExprLiteral): a.Expr | nil;
default(value: a.ExprDefault): a.Expr | nil;
/** Called when a reference is used */
ref(val: a.ExprRef): a.Expr | nil;
unary(val: a.ExprUnary): a.Expr | nil;
binary(val: a.ExprBinary): a.Expr | nil;
}
declare class SkipModifier extends AstDefaultMapper {
readonly parent: AstDefaultMapper;
constructor(parent: AstDefaultMapper);
}
export {};
//# sourceMappingURL=ast-mapper.d.ts.map