Home / Class/ MySqlRelationalQuery Class — drizzle-orm Architecture

MySqlRelationalQuery Class — drizzle-orm Architecture

Architecture documentation for the MySqlRelationalQuery class in query.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  97e93111_9d48_b41c_c8c3_586a25b127c9["MySqlRelationalQuery"]
  c0f473e5_fef0_c6f5_7c3f_5af2802f3012["query.ts"]
  97e93111_9d48_b41c_c8c3_586a25b127c9 -->|defined in| c0f473e5_fef0_c6f5_7c3f_5af2802f3012
  2ee925ea_5c34_272a_8bec_55e3606fb005["constructor()"]
  97e93111_9d48_b41c_c8c3_586a25b127c9 -->|method| 2ee925ea_5c34_272a_8bec_55e3606fb005
  d9a2e9f1_72dd_6389_6ef7_378d724acd45["prepare()"]
  97e93111_9d48_b41c_c8c3_586a25b127c9 -->|method| d9a2e9f1_72dd_6389_6ef7_378d724acd45
  8998ff31_5c63_b62f_72b4_4e37cb165428["_getQuery()"]
  97e93111_9d48_b41c_c8c3_586a25b127c9 -->|method| 8998ff31_5c63_b62f_72b4_4e37cb165428
  31e0e982_9584_6e29_b686_65a7fb1faabe["_toSQL()"]
  97e93111_9d48_b41c_c8c3_586a25b127c9 -->|method| 31e0e982_9584_6e29_b686_65a7fb1faabe
  a1e1d29a_0c0c_4049_fb1f_6345738d63d2["getSQL()"]
  97e93111_9d48_b41c_c8c3_586a25b127c9 -->|method| a1e1d29a_0c0c_4049_fb1f_6345738d63d2
  1d7f8d83_9d45_b363_15d5_a03e718c5381["toSQL()"]
  97e93111_9d48_b41c_c8c3_586a25b127c9 -->|method| 1d7f8d83_9d45_b363_15d5_a03e718c5381
  9e5f50b0_23c1_cf72_80af_ecc8b20d9473["execute()"]
  97e93111_9d48_b41c_c8c3_586a25b127c9 -->|method| 9e5f50b0_23c1_cf72_80af_ecc8b20d9473

Relationship Graph

Source Code

drizzle-orm/src/mysql-core/query-builders/query.ts lines 76–157

export class MySqlRelationalQuery<
	TPreparedQueryHKT extends PreparedQueryHKTBase,
	TResult,
> extends QueryPromise<TResult> {
	static override readonly [entityKind]: string = 'MySqlRelationalQuery';

	declare protected $brand: 'MySqlRelationalQuery';

	constructor(
		private fullSchema: Record<string, unknown>,
		private schema: TablesRelationalConfig,
		private tableNamesMap: Record<string, string>,
		private table: MySqlTable,
		private tableConfig: TableRelationalConfig,
		private dialect: MySqlDialect,
		private session: MySqlSession,
		private config: DBQueryConfig<'many', true> | true,
		private queryMode: 'many' | 'first',
		private mode?: Mode,
	) {
		super();
	}

	prepare() {
		const { query, builtQuery } = this._toSQL();
		return this.session.prepareQuery(
			builtQuery,
			undefined,
			(rawRows) => {
				const rows = rawRows.map((row) => mapRelationalRow(this.schema, this.tableConfig, row, query.selection));
				if (this.queryMode === 'first') {
					return rows[0] as TResult;
				}
				return rows as TResult;
			},
		) as PreparedQueryKind<TPreparedQueryHKT, MySqlPreparedQueryConfig & { execute: TResult }, true>;
	}

	private _getQuery() {
		const query = this.mode === 'planetscale'
			? this.dialect.buildRelationalQueryWithoutLateralSubqueries({
				fullSchema: this.fullSchema,
				schema: this.schema,
				tableNamesMap: this.tableNamesMap,
				table: this.table,
				tableConfig: this.tableConfig,
				queryConfig: this.config,
				tableAlias: this.tableConfig.tsName,
			})
			: this.dialect.buildRelationalQuery({
				fullSchema: this.fullSchema,
				schema: this.schema,
				tableNamesMap: this.tableNamesMap,
				table: this.table,
				tableConfig: this.tableConfig,
				queryConfig: this.config,
				tableAlias: this.tableConfig.tsName,
			});
		return query;
	}

	private _toSQL(): { query: BuildRelationalQueryResult; builtQuery: QueryWithTypings } {
		const query = this._getQuery();

		const builtQuery = this.dialect.sqlToQuery(query.sql as SQL);

		return { builtQuery, query };
	}

	/** @internal */
	getSQL(): SQL {
		return this._getQuery().sql as SQL;
	}

	toSQL(): Query {
		return this._toSQL().builtQuery;
	}

	override execute(): Promise<TResult> {
		return this.prepare().execute();
	}

Domain

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free