Home / Class/ PlanetScalePreparedQuery Class — drizzle-orm Architecture

PlanetScalePreparedQuery Class — drizzle-orm Architecture

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

Entity Profile

Dependency Diagram

graph TD
  a75923e0_3e96_566d_c588_fb84a7e15621["PlanetScalePreparedQuery"]
  e55f93a1_bb42_b29e_7f05_390a87b09427["session.ts"]
  a75923e0_3e96_566d_c588_fb84a7e15621 -->|defined in| e55f93a1_bb42_b29e_7f05_390a87b09427
  bcf6cfcd_da5e_86f5_a01b_3e319e280592["constructor()"]
  a75923e0_3e96_566d_c588_fb84a7e15621 -->|method| bcf6cfcd_da5e_86f5_a01b_3e319e280592
  73cab381_871d_ad4b_62e2_b6784fb4fbec["execute()"]
  a75923e0_3e96_566d_c588_fb84a7e15621 -->|method| 73cab381_871d_ad4b_62e2_b6784fb4fbec
  ac493f8c_e14e_17e4_6db8_824f6e075c9a["iterator()"]
  a75923e0_3e96_566d_c588_fb84a7e15621 -->|method| ac493f8c_e14e_17e4_6db8_824f6e075c9a

Relationship Graph

Source Code

drizzle-orm/src/planetscale-serverless/session.ts lines 22–111

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

	private rawQuery = { as: 'object' } as const;
	private query = { as: 'array' } as const;

	constructor(
		private client: Client | Transaction | 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,
			rawQuery,
			query,
			joinsNotNullableMap,
			customResultMapper,
			returningIds,
			generatedIds,
		} = this;
		if (!fields && !customResultMapper) {
			const res = await this.queryWithCache(queryString, params, async () => {
				return await client.execute(queryString, params, rawQuery);
			});

			const insertId = Number.parseFloat(res.insertId);
			const affectedRows = res.rowsAffected;

			// 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, query);
		});

		if (customResultMapper) {
			return customResultMapper(rows as unknown[][]);

Domain

Frequently Asked Questions

What is the PlanetScalePreparedQuery class?
PlanetScalePreparedQuery is a class in the drizzle-orm codebase, defined in drizzle-orm/src/planetscale-serverless/session.ts.
Where is PlanetScalePreparedQuery defined?
PlanetScalePreparedQuery is defined in drizzle-orm/src/planetscale-serverless/session.ts at line 22.

Analyze Your Own Codebase

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

Try Supermodel Free