Home / Class/ MySql2PreparedQuery Class — drizzle-orm Architecture

MySql2PreparedQuery Class — drizzle-orm Architecture

Architecture documentation for the MySql2PreparedQuery class in session.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  f6d5f366_5923_39eb_1585_cad431d4f3e9["MySql2PreparedQuery"]
  4f23092f_3066_0d48_8396_c28751f25d01["session.ts"]
  f6d5f366_5923_39eb_1585_cad431d4f3e9 -->|defined in| 4f23092f_3066_0d48_8396_c28751f25d01
  ec0bb7b5_2f95_b9d6_3de6_5ebfc0bd1bb8["constructor()"]
  f6d5f366_5923_39eb_1585_cad431d4f3e9 -->|method| ec0bb7b5_2f95_b9d6_3de6_5ebfc0bd1bb8
  27c4ec08_2b89_4cd2_2eb6_775ccd3cb0d8["execute()"]
  f6d5f366_5923_39eb_1585_cad431d4f3e9 -->|method| 27c4ec08_2b89_4cd2_2eb6_775ccd3cb0d8
  5f3cd8e4_7c22_bf24_d2e4_56a1e1163bc6["iterator()"]
  f6d5f366_5923_39eb_1585_cad431d4f3e9 -->|method| 5f3cd8e4_7c22_bf24_d2e4_56a1e1163bc6

Relationship Graph

Source Code

drizzle-orm/src/mysql2/session.ts lines 45–196

export class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {
	static override readonly [entityKind]: string = 'MySql2PreparedQuery';

	private rawQuery: QueryOptions;
	private query: QueryOptions;

	constructor(
		private client: MySql2Client,
		queryString: string,
		private params: unknown[],
		private logger: Logger,
		cache: Cache,
		queryMetadata: {
			type: 'select' | 'update' | 'delete' | 'insert';
			tables: string[];
		} | undefined,
		cacheConfig: WithCacheConfig | undefined,
		private fields: SelectedFieldsOrdered | undefined,
		private customResultMapper?: (rows: unknown[][]) => T['execute'],
		// Keys that were used in $default and the value that was generated for them
		private generatedIds?: Record<string, unknown>[],
		// Keys that should be returned, it has the column with all properries + key from object
		private returningIds?: SelectedFieldsOrdered,
	) {
		super(cache, queryMetadata, cacheConfig);
		this.rawQuery = {
			sql: queryString,
			// rowsAsArray: true,
			typeCast: function(field: any, next: any) {
				if (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {
					return field.string();
				}
				return next();
			},
		};
		this.query = {
			sql: queryString,
			rowsAsArray: true,
			typeCast: function(field: any, next: any) {
				if (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {
					return field.string();
				}
				return next();
			},
		};
	}

	async execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {
		const params = fillPlaceholders(this.params, placeholderValues);

		this.logger.logQuery(this.rawQuery.sql, params);

		const { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } =
			this;
		if (!fields && !customResultMapper) {
			const res = await this.queryWithCache(rawQuery.sql, params, async () => {
				return await client.query<any>(rawQuery, params);
			});

			const insertId = res[0].insertId;
			const affectedRows = res[0].affectedRows;
			// for each row, I need to check keys from
			if (returningIds) {
				const returningResponse = [];
				let j = 0;
				for (let i = insertId; i < insertId + affectedRows; i++) {
					for (const column of returningIds) {
						const key = returningIds[0]!.path[0]!;
						if (is(column.field, Column)) {
							// @ts-ignore
							if (column.field.primary && column.field.autoIncrement) {
								returningResponse.push({ [key]: i });
							}
							if (column.field.defaultFn && generatedIds) {
								// generatedIds[rowIdx][key]
								returningResponse.push({ [key]: generatedIds[j]![key] });
							}
						}
					}
					j++;
				}

Domain

Frequently Asked Questions

What is the MySql2PreparedQuery class?
MySql2PreparedQuery is a class in the drizzle-orm codebase, defined in drizzle-orm/src/mysql2/session.ts.
Where is MySql2PreparedQuery defined?
MySql2PreparedQuery is defined in drizzle-orm/src/mysql2/session.ts at line 45.

Analyze Your Own Codebase

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

Try Supermodel Free