UNPKG

@kuindji/sql-type-parser

Version:
116 lines 4.18 kB
/** * AST type definitions specific to SQL UPDATE queries * * This module contains AST nodes that are specific to UPDATE: * - UpdateClause - the main UPDATE statement * - SetClause - SET assignments * - FromClause for multi-table updates */ import type { Flatten } from "../common/utils.js"; import type { UnboundColumnRef, TableRef, TableSource, WhereExpr, JoinClause, CTEDefinition } from "../common/ast.js"; /** * A single SET assignment value * Can be a literal, parameter placeholder, DEFAULT, NULL, or expression */ export type SetValue = { readonly type: "Literal"; readonly value: string | number | boolean | null; } | { readonly type: "Default"; } | { readonly type: "Null"; } | { readonly type: "Param"; readonly name: string | number; } | { readonly type: "Expression"; readonly expr: string; } | { readonly type: "ColumnRef"; readonly column: string; readonly table?: string; }; /** * A single SET assignment: column = value */ export type SetAssignment<Column extends string = string, Value extends SetValue = SetValue> = { readonly type: "SetAssignment"; readonly column: Column; readonly value: Value; }; /** * SET clause containing one or more assignments */ export type SetClause<Assignments extends SetAssignment[] = SetAssignment[]> = { readonly type: "SetClause"; readonly assignments: Assignments; }; /** * FROM clause for multi-table UPDATE * Supports: UPDATE t1 SET ... FROM t2 WHERE t1.id = t2.ref_id * Also supports JOINs: UPDATE t1 SET ... FROM t2 JOIN t3 ON t2.id = t3.t2_id WHERE ... */ export type UpdateFromClause<Tables extends TableSource[] = TableSource[], Joins extends JoinClause[] | undefined = JoinClause[] | undefined> = { readonly type: "UpdateFromClause"; readonly tables: Tables; readonly joins: Joins; }; /** * Reference qualifier for RETURNING columns * - "OLD" - returns the pre-update value * - "NEW" - returns the post-update value (default behavior) * - undefined - no qualifier (same as NEW for UPDATE) */ export type ReturningQualifier = "OLD" | "NEW" | undefined; /** * A column reference in RETURNING with optional OLD/NEW qualifier * PostgreSQL 17+ syntax: RETURNING OLD.column, NEW.column, OLD.*, NEW.* */ export type QualifiedColumnRef<Column extends string = string, Qualifier extends ReturningQualifier = ReturningQualifier> = { readonly type: "QualifiedColumnRef"; readonly column: Column; readonly qualifier: Qualifier; }; /** * Wildcard reference with optional OLD/NEW qualifier * PostgreSQL 17+ syntax: RETURNING OLD.*, NEW.* */ export type QualifiedWildcard<Qualifier extends ReturningQualifier = ReturningQualifier> = { readonly type: "QualifiedWildcard"; readonly qualifier: Qualifier; }; /** * A RETURNING item can be: * - Unqualified column or wildcard (backwards compatible) * - OLD/NEW qualified column or wildcard (PostgreSQL 17+) */ export type ReturningItem = UnboundColumnRef | QualifiedColumnRef | QualifiedWildcard; /** * RETURNING clause for UPDATE * Can return *, specific columns, OLD/NEW qualified references */ export type UpdateReturningClause<Columns extends "*" | ReturningItem[] = "*" | ReturningItem[]> = { readonly type: "ReturningClause"; readonly columns: Columns; }; /** * The main UPDATE clause AST */ export type UpdateClause<Table extends TableRef = TableRef, Set extends SetClause = SetClause, From extends UpdateFromClause | undefined = UpdateFromClause | undefined, Where extends WhereExpr | undefined = WhereExpr | undefined, Returning extends UpdateReturningClause | undefined = UpdateReturningClause | undefined, CTEs extends CTEDefinition[] | undefined = CTEDefinition[] | undefined> = Flatten<{ readonly type: "UpdateClause"; readonly table: Table; readonly set: Set; readonly from: From; readonly where: Where; readonly returning: Returning; readonly ctes: CTEs; }>; /** * The top-level UPDATE SQL query AST */ export type SQLUpdateQuery<Query extends UpdateClause = UpdateClause> = { readonly type: "SQLQuery"; readonly queryType: "UPDATE"; readonly query: Query; }; //# sourceMappingURL=ast.d.ts.map