Home / Class/ PgUpdateBase Class — drizzle-orm Architecture

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

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