Home / Class/ TiDBServerlessPreparedQuery Class — drizzle-orm Architecture

TiDBServerlessPreparedQuery Class — drizzle-orm Architecture

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

Entity Profile

Dependency Diagram

graph TD
  3e5fd3be_708b_5a31_d952_06f96db1eba7["TiDBServerlessPreparedQuery"]
  baed709d_8779_aa82_55d7_015a29a37065["session.ts"]
  3e5fd3be_708b_5a31_d952_06f96db1eba7 -->|defined in| baed709d_8779_aa82_55d7_015a29a37065
  320aa33a_88e4_c188_84e8_7310de786130["constructor()"]
  3e5fd3be_708b_5a31_d952_06f96db1eba7 -->|method| 320aa33a_88e4_c188_84e8_7310de786130
  0d0d9914_7bbd_c75e_f74a_0d3e57b68553["execute()"]
  3e5fd3be_708b_5a31_d952_06f96db1eba7 -->|method| 0d0d9914_7bbd_c75e_f74a_0d3e57b68553
  6c7c3201_5630_cfc6_35a8_f4d23a761de0["iterator()"]
  3e5fd3be_708b_5a31_d952_06f96db1eba7 -->|method| 6c7c3201_5630_cfc6_35a8_f4d23a761de0

Relationship Graph

Source Code

drizzle-orm/src/tidb-serverless/session.ts lines 26–102

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

	constructor(
		private client: Tx | Connection,
		private 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);
	}

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

		this.logger.logQuery(this.queryString, params);

		const { fields, client, queryString, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } = this;
		if (!fields && !customResultMapper) {
			const res = await this.queryWithCache(queryString, params, async () => {
				return await client.execute(queryString, params, executeRawConfig) as FullResult;
			});
			const insertId = res.lastInsertId ?? 0;
			const affectedRows = res.rowsAffected ?? 0;
			// 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++;
				}

				return returningResponse;
			}
			return res;
		}

		const rows = await this.queryWithCache(queryString, params, async () => {
			return await client.execute(queryString, params, queryConfig) as unknown[][];
		});

		if (customResultMapper) {
			return customResultMapper(rows);
		}

		return rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));
	}

	override iterator(_placeholderValues?: Record<string, unknown>): AsyncGenerator<T['iterator']> {
		throw new Error('Streaming is not supported by the TiDB Cloud Serverless driver');
	}
}

Domain

Frequently Asked Questions

What is the TiDBServerlessPreparedQuery class?
TiDBServerlessPreparedQuery is a class in the drizzle-orm codebase, defined in drizzle-orm/src/tidb-serverless/session.ts.
Where is TiDBServerlessPreparedQuery defined?
TiDBServerlessPreparedQuery is defined in drizzle-orm/src/tidb-serverless/session.ts at line 26.

Analyze Your Own Codebase

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

Try Supermodel Free