Home / Class/ PgInsertBuilder Class — drizzle-orm Architecture

PgInsertBuilder Class — drizzle-orm Architecture

Architecture documentation for the PgInsertBuilder class in insert.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  37a723cd_da98_e2e2_845b_524883021183["PgInsertBuilder"]
  6f066777_3f37_e9b7_9d78_03e1a3ea895d["insert.ts"]
  37a723cd_da98_e2e2_845b_524883021183 -->|defined in| 6f066777_3f37_e9b7_9d78_03e1a3ea895d
  127bd163_0cb1_47d6_59d5_9c070e3973a8["constructor()"]
  37a723cd_da98_e2e2_845b_524883021183 -->|method| 127bd163_0cb1_47d6_59d5_9c070e3973a8
  4edaa73c_467f_130a_ae41_75b6d4615d0e["setToken()"]
  37a723cd_da98_e2e2_845b_524883021183 -->|method| 4edaa73c_467f_130a_ae41_75b6d4615d0e
  9d8e0a04_424e_19e9_f78d_6a514a72683b["overridingSystemValue()"]
  37a723cd_da98_e2e2_845b_524883021183 -->|method| 9d8e0a04_424e_19e9_f78d_6a514a72683b
  3a8c72f2_198c_3d63_3d4d_f2645e845833["values()"]
  37a723cd_da98_e2e2_845b_524883021183 -->|method| 3a8c72f2_198c_3d63_3d4d_f2645e845833
  c98266c1_18f9_8e2e_8bff_6c17243f2db7["select()"]
  37a723cd_da98_e2e2_845b_524883021183 -->|method| c98266c1_18f9_8e2e_8bff_6c17243f2db7

Relationship Graph

Source Code

drizzle-orm/src/pg-core/query-builders/insert.ts lines 55–135

export class PgInsertBuilder<
	TTable extends PgTable,
	TQueryResult extends PgQueryResultHKT,
	OverrideT extends boolean = false,
> {
	static readonly [entityKind]: string = 'PgInsertBuilder';

	constructor(
		private table: TTable,
		private session: PgSession,
		private dialect: PgDialect,
		private withList?: Subquery[],
		private overridingSystemValue_?: boolean,
	) {}

	private authToken?: NeonAuthToken;
	/** @internal */
	setToken(token?: NeonAuthToken) {
		this.authToken = token;
		return this;
	}

	overridingSystemValue(): Omit<PgInsertBuilder<TTable, TQueryResult, true>, 'overridingSystemValue'> {
		this.overridingSystemValue_ = true;
		return this as any;
	}

	values(value: PgInsertValue<TTable, OverrideT>): PgInsertBase<TTable, TQueryResult>;
	values(values: PgInsertValue<TTable, OverrideT>[]): PgInsertBase<TTable, TQueryResult>;
	values(
		values: PgInsertValue<TTable, OverrideT> | PgInsertValue<TTable, OverrideT>[],
	): PgInsertBase<TTable, TQueryResult> {
		values = Array.isArray(values) ? values : [values];
		if (values.length === 0) {
			throw new Error('values() must be called with at least one value');
		}
		const mappedValues = values.map((entry) => {
			const result: Record<string, Param | SQL> = {};
			const cols = this.table[Table.Symbol.Columns];
			for (const colKey of Object.keys(entry)) {
				const colValue = entry[colKey as keyof typeof entry];
				result[colKey] = is(colValue, SQL) ? colValue : new Param(colValue, cols[colKey]);
			}
			return result;
		});

		return new PgInsertBase(
			this.table,
			mappedValues,
			this.session,
			this.dialect,
			this.withList,
			false,
			this.overridingSystemValue_,
		).setToken(this.authToken) as any;
	}

	select(selectQuery: (qb: QueryBuilder) => PgInsertSelectQueryBuilder<TTable>): PgInsertBase<TTable, TQueryResult>;
	select(selectQuery: (qb: QueryBuilder) => SQL): PgInsertBase<TTable, TQueryResult>;
	select(selectQuery: SQL): PgInsertBase<TTable, TQueryResult>;
	select(selectQuery: PgInsertSelectQueryBuilder<TTable>): PgInsertBase<TTable, TQueryResult>;
	select(
		selectQuery:
			| SQL
			| PgInsertSelectQueryBuilder<TTable>
			| ((qb: QueryBuilder) => PgInsertSelectQueryBuilder<TTable> | SQL),
	): PgInsertBase<TTable, TQueryResult> {
		const select = typeof selectQuery === 'function' ? selectQuery(new QueryBuilder()) : selectQuery;

		if (
			!is(select, SQL)
			&& !haveSameKeys(this.table[Columns], select._.selectedFields)
		) {
			throw new Error(
				'Insert select error: selected fields are not the same or are in a different order compared to the table definition',
			);
		}

		return new PgInsertBase(this.table, select, this.session, this.dialect, this.withList, true);
	}
}

Domain

Frequently Asked Questions

What is the PgInsertBuilder class?
PgInsertBuilder is a class in the drizzle-orm codebase, defined in drizzle-orm/src/pg-core/query-builders/insert.ts.
Where is PgInsertBuilder defined?
PgInsertBuilder is defined in drizzle-orm/src/pg-core/query-builders/insert.ts at line 55.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free