PgUpdateBase Class — drizzle-orm Architecture
Architecture documentation for the PgUpdateBase class in update.ts from the drizzle-orm codebase.
Entity Profile
Dependency Diagram
graph TD b3550288_69f4_670f_8c2e_e82d7003a700["PgUpdateBase"] ebf76db1_7804_287b_622a_ab94e9efc196["update.ts"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|defined in| ebf76db1_7804_287b_622a_ab94e9efc196 4c644af9_834b_2357_da93_8a1579658c03["constructor()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| 4c644af9_834b_2357_da93_8a1579658c03 7fd030ef_bac2_595d_4f22_720d453433dd["from()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| 7fd030ef_bac2_595d_4f22_720d453433dd c759f63e_61ae_e062_9eeb_7503f7588a98["getTableLikeFields()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| c759f63e_61ae_e062_9eeb_7503f7588a98 7fd77dff_8f6a_596e_d379_5e137c8ad92e["createJoin()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| 7fd77dff_8f6a_596e_d379_5e137c8ad92e 9ed58169_0fbf_1e69_954c_e8721114263f["where()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| 9ed58169_0fbf_1e69_954c_e8721114263f ed31f2ce_0009_ed78_461d_e5bba26db2ed["returning()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| ed31f2ce_0009_ed78_461d_e5bba26db2ed 62c04c23_7271_5ffe_3388_c23b82e84843["getSQL()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| 62c04c23_7271_5ffe_3388_c23b82e84843 09b7854f_0d23_8396_376e_fcb2abb8ef32["toSQL()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| 09b7854f_0d23_8396_376e_fcb2abb8ef32 e5a5b03c_5c66_4927_31d0_4cd2a33f2d3b["_prepare()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| e5a5b03c_5c66_4927_31d0_4cd2a33f2d3b d451598d_c4bb_f4d4_3b5f_d5651d78f0f8["prepare()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| d451598d_c4bb_f4d4_3b5f_d5651d78f0f8 d12ad69f_210c_8e44_5296_274e983d92e4["setToken()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| d12ad69f_210c_8e44_5296_274e983d92e4 90c07875_c6c0_0445_de04_af55539f9398["getSelectedFields()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| 90c07875_c6c0_0445_de04_af55539f9398 c38f162b_17b8_3c3a_c61b_c7d62578b170["$dynamic()"] b3550288_69f4_670f_8c2e_e82d7003a700 -->|method| c38f162b_17b8_3c3a_c61b_c7d62578b170
Relationship Graph
Source Code
drizzle-orm/src/pg-core/query-builders/update.ts lines 341–625
export class PgUpdateBase<
TTable extends PgTable,
TQueryResult extends PgQueryResultHKT,
TFrom extends PgTable | Subquery | PgViewBase | SQL | undefined = undefined,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
TSelectedFields extends ColumnsSelection | undefined = undefined,
TReturning extends Record<string, unknown> | undefined = undefined,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
TNullabilityMap extends Record<string, JoinNullability> = Record<TTable['_']['name'], 'not-null'>,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
TJoins extends Join[] = [],
// eslint-disable-next-line @typescript-eslint/no-unused-vars
TDynamic extends boolean = false,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
TExcludedMethods extends string = never,
> extends QueryPromise<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]>
implements
RunnableQuery<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[], 'pg'>,
SQLWrapper
{
static override readonly [entityKind]: string = 'PgUpdate';
private config: PgUpdateConfig;
private tableName: string | undefined;
private joinsNotNullableMap: Record<string, boolean>;
protected cacheConfig?: WithCacheConfig;
constructor(
table: TTable,
set: UpdateSet,
private session: PgSession,
private dialect: PgDialect,
withList?: Subquery[],
) {
super();
this.config = { set, table, withList, joins: [] };
this.tableName = getTableLikeName(table);
this.joinsNotNullableMap = typeof this.tableName === 'string' ? { [this.tableName]: true } : {};
}
from<TFrom extends PgTable | Subquery | PgViewBase | SQL>(
source: TableLikeHasEmptySelection<TFrom> extends true ? DrizzleTypeError<
"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"
>
: TFrom,
): PgUpdateWithJoins<this, TDynamic, TFrom> {
const src = source as TFrom;
const tableName = getTableLikeName(src);
if (typeof tableName === 'string') {
this.joinsNotNullableMap[tableName] = true;
}
this.config.from = src;
return this as any;
}
private getTableLikeFields(table: PgTable | Subquery | PgViewBase): Record<string, unknown> {
if (is(table, PgTable)) {
return table[Table.Symbol.Columns];
} else if (is(table, Subquery)) {
return table._.selectedFields;
}
return table[ViewBaseConfig].selectedFields;
}
private createJoin<TJoinType extends JoinType>(
joinType: TJoinType,
): PgUpdateJoinFn<this, TDynamic, TJoinType> {
return ((
table: PgTable | Subquery | PgViewBase | SQL,
on: ((updateTable: TTable, from: TFrom) => SQL | undefined) | SQL | undefined,
) => {
const tableName = getTableLikeName(table);
if (typeof tableName === 'string' && this.config.joins.some((join) => join.alias === tableName)) {
throw new Error(`Alias "${tableName}" is already used in this query`);
}
if (typeof on === 'function') {
const from = this.config.from && !is(this.config.from, SQL)
? this.getTableLikeFields(this.config.from)
: undefined;
Domain
Source
Frequently Asked Questions
What is the PgUpdateBase class?
PgUpdateBase is a class in the drizzle-orm codebase, defined in drizzle-orm/src/pg-core/query-builders/update.ts.
Where is PgUpdateBase defined?
PgUpdateBase is defined in drizzle-orm/src/pg-core/query-builders/update.ts at line 341.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free