Home / Class/ MySqlInsertBuilder Class — drizzle-orm Architecture

MySqlInsertBuilder Class — drizzle-orm Architecture

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

Entity Profile

Dependency Diagram

graph TD
  25259b4b_5552_40d0_69a5_4bbac3025dc9["MySqlInsertBuilder"]
  a270d70d_1a42_692c_4fcf_09f69761d58e["insert.ts"]
  25259b4b_5552_40d0_69a5_4bbac3025dc9 -->|defined in| a270d70d_1a42_692c_4fcf_09f69761d58e
  6355b30e_4df5_be77_b2aa_4b3f237ee74c["constructor()"]
  25259b4b_5552_40d0_69a5_4bbac3025dc9 -->|method| 6355b30e_4df5_be77_b2aa_4b3f237ee74c
  873e8e27_7565_c887_8b88_ed79ed56bc54["ignore()"]
  25259b4b_5552_40d0_69a5_4bbac3025dc9 -->|method| 873e8e27_7565_c887_8b88_ed79ed56bc54
  a2614cb2_5d7d_d96b_b795_d1927ebdc101["values()"]
  25259b4b_5552_40d0_69a5_4bbac3025dc9 -->|method| a2614cb2_5d7d_d96b_b795_d1927ebdc101
  8c0bf2a2_76fc_e577_c5e6_ccc78a786070["select()"]
  25259b4b_5552_40d0_69a5_4bbac3025dc9 -->|method| 8c0bf2a2_76fc_e577_c5e6_ccc78a786070

Relationship Graph

Source Code

drizzle-orm/src/mysql-core/query-builders/insert.ts lines 49–116

export class MySqlInsertBuilder<
	TTable extends MySqlTable,
	TQueryResult extends MySqlQueryResultHKT,
	TPreparedQueryHKT extends PreparedQueryHKTBase,
> {
	static readonly [entityKind]: string = 'MySqlInsertBuilder';

	private shouldIgnore = false;

	constructor(
		private table: TTable,
		private session: MySqlSession,
		private dialect: MySqlDialect,
	) {}

	ignore(): this {
		this.shouldIgnore = true;
		return this;
	}

	values(value: MySqlInsertValue<TTable>): MySqlInsertBase<TTable, TQueryResult, TPreparedQueryHKT>;
	values(values: MySqlInsertValue<TTable>[]): MySqlInsertBase<TTable, TQueryResult, TPreparedQueryHKT>;
	values(
		values: MySqlInsertValue<TTable> | MySqlInsertValue<TTable>[],
	): MySqlInsertBase<TTable, TQueryResult, TPreparedQueryHKT> {
		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 MySqlInsertBase(this.table, mappedValues, this.shouldIgnore, this.session, this.dialect);
	}

	select(
		selectQuery: (qb: QueryBuilder) => MySqlInsertSelectQueryBuilder<TTable>,
	): MySqlInsertBase<TTable, TQueryResult, TPreparedQueryHKT>;
	select(selectQuery: (qb: QueryBuilder) => SQL): MySqlInsertBase<TTable, TQueryResult, TPreparedQueryHKT>;
	select(selectQuery: SQL): MySqlInsertBase<TTable, TQueryResult, TPreparedQueryHKT>;
	select(selectQuery: MySqlInsertSelectQueryBuilder<TTable>): MySqlInsertBase<TTable, TQueryResult, TPreparedQueryHKT>;
	select(
		selectQuery:
			| SQL
			| MySqlInsertSelectQueryBuilder<TTable>
			| ((qb: QueryBuilder) => MySqlInsertSelectQueryBuilder<TTable> | SQL),
	): MySqlInsertBase<TTable, TQueryResult, TPreparedQueryHKT> {
		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 MySqlInsertBase(this.table, select, this.shouldIgnore, this.session, this.dialect, true);
	}
}

Domain

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free