Home / Function/ buildInsertQuery() — drizzle-orm Function Reference

buildInsertQuery() — drizzle-orm Function Reference

Architecture documentation for the buildInsertQuery() function in dialect.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  ba30bda6_3d52_4a42_4c46_f0fee0b037ba["buildInsertQuery()"]
  1da3f399_3da2_55ff_342e_fb92de5e010c["SingleStoreDialect"]
  ba30bda6_3d52_4a42_4c46_f0fee0b037ba -->|defined in| 1da3f399_3da2_55ff_342e_fb92de5e010c
  style ba30bda6_3d52_4a42_4c46_f0fee0b037ba fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-orm/src/singlestore-core/dialect.ts lines 466–525

	buildInsertQuery(
		{ table, values, ignore, onConflict }: SingleStoreInsertConfig,
	): { sql: SQL; generatedIds: Record<string, unknown>[] } {
		// const isSingleValue = values.length === 1;
		const valuesSqlList: ((SQLChunk | SQL)[] | SQL)[] = [];
		const columns: Record<string, SingleStoreColumn> = table[Table.Symbol.Columns];
		const colEntries: [string, SingleStoreColumn][] = Object.entries(columns).filter(([_, col]) =>
			!col.shouldDisableInsert()
		);

		const insertOrder = colEntries.map(([, column]) => sql.identifier(this.casing.getColumnCasing(column)));
		const generatedIdsResponse: Record<string, unknown>[] = [];

		for (const [valueIndex, value] of values.entries()) {
			const generatedIds: Record<string, unknown> = {};

			const valueList: (SQLChunk | SQL)[] = [];
			for (const [fieldName, col] of colEntries) {
				const colValue = value[fieldName];
				if (colValue === undefined || (is(colValue, Param) && colValue.value === undefined)) {
					// eslint-disable-next-line unicorn/no-negated-condition
					if (col.defaultFn !== undefined) {
						const defaultFnResult = col.defaultFn();
						generatedIds[fieldName] = defaultFnResult;
						const defaultValue = is(defaultFnResult, SQL) ? defaultFnResult : sql.param(defaultFnResult, col);
						valueList.push(defaultValue);
						// eslint-disable-next-line unicorn/no-negated-condition
					} else if (!col.default && col.onUpdateFn !== undefined) {
						const onUpdateFnResult = col.onUpdateFn();
						const newValue = is(onUpdateFnResult, SQL) ? onUpdateFnResult : sql.param(onUpdateFnResult, col);
						valueList.push(newValue);
					} else {
						valueList.push(sql`default`);
					}
				} else {
					if (col.defaultFn && is(colValue, Param)) {
						generatedIds[fieldName] = colValue.value;
					}
					valueList.push(colValue);
				}
			}

			generatedIdsResponse.push(generatedIds);
			valuesSqlList.push(valueList);
			if (valueIndex < values.length - 1) {
				valuesSqlList.push(sql`, `);
			}
		}

		const valuesSql = sql.join(valuesSqlList);

		const ignoreSql = ignore ? sql` ignore` : undefined;

		const onConflictSql = onConflict ? sql` on duplicate key ${onConflict}` : undefined;

		return {
			sql: sql`insert${ignoreSql} into ${table} ${insertOrder} values ${valuesSql}${onConflictSql}`,
			generatedIds: generatedIdsResponse,
		};
	}

Domain

Subdomains

Frequently Asked Questions

What does buildInsertQuery() do?
buildInsertQuery() is a function in the drizzle-orm codebase, defined in drizzle-orm/src/singlestore-core/dialect.ts.
Where is buildInsertQuery() defined?
buildInsertQuery() is defined in drizzle-orm/src/singlestore-core/dialect.ts at line 466.

Analyze Your Own Codebase

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

Try Supermodel Free