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

connectToMySQL() — drizzle-orm Function Reference

Architecture documentation for the connectToMySQL() function in connections.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  062566a8_032a_e9e8_19de_d3efea4be507["connectToMySQL()"]
  4e02c2bb_54a8_1500_813e_2cafd1ad4f59["connections.ts"]
  062566a8_032a_e9e8_19de_d3efea4be507 -->|defined in| 4e02c2bb_54a8_1500_813e_2cafd1ad4f59
  f2f3a989_a4ab_1dd7_33fb_fd4006db7b5b["parseMysqlCredentials()"]
  062566a8_032a_e9e8_19de_d3efea4be507 -->|calls| f2f3a989_a4ab_1dd7_33fb_fd4006db7b5b
  7aefe3aa_a868_e43f_09eb_fcf0004526d1["checkPackage()"]
  062566a8_032a_e9e8_19de_d3efea4be507 -->|calls| 7aefe3aa_a868_e43f_09eb_fcf0004526d1
  style 062566a8_032a_e9e8_19de_d3efea4be507 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-kit/src/cli/connections.ts lines 741–879

export const connectToMySQL = async (
	it: MysqlCredentials,
): Promise<{
	db: DB;
	packageName: 'mysql2' | '@planetscale/database';
	proxy: Proxy;
	transactionProxy: TransactionProxy;
	database: string;
	migrate: (config: MigrationConfig) => Promise<void>;
}> => {
	const result = parseMysqlCredentials(it);

	if (await checkPackage('mysql2')) {
		const { createConnection } = await import('mysql2/promise');
		const { drizzle } = await import('drizzle-orm/mysql2');
		const { migrate } = await import('drizzle-orm/mysql2/migrator');

		const connection = result.url
			? await createConnection(result.url)
			: await createConnection(result.credentials!); // needed for some reason!

		const db = drizzle(connection);
		const migrateFn = async (config: MigrationConfig) => {
			return migrate(db, config);
		};

		const typeCast = (field: any, next: any) => {
			if (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {
				return field.string();
			}
			return next();
		};

		await connection.connect();
		const query: DB['query'] = async <T>(
			sql: string,
			params?: any[],
		): Promise<T[]> => {
			const res = await connection.execute({
				sql,
				values: params,
				typeCast,
			});
			return res[0] as any;
		};

		const proxy: Proxy = async (params: ProxyParams) => {
			const result = await connection.query({
				sql: params.sql,
				values: params.params,
				rowsAsArray: params.mode === 'array',
				typeCast,
			});
			return result[0] as any[];
		};

		const transactionProxy: TransactionProxy = async (queries) => {
			const results: any[] = [];
			try {
				await connection.beginTransaction();
				for (const query of queries) {
					const res = await connection.query(query.sql);
					results.push(res[0]);
				}
				await connection.commit();
			} catch (error) {
				await connection.rollback();
				results.push(error as Error);
			}
			return results;
		};

		return {
			db: { query },
			packageName: 'mysql2',
			proxy,
			transactionProxy,
			database: result.database,
			migrate: migrateFn,
		};
	}

Domain

Subdomains

Frequently Asked Questions

What does connectToMySQL() do?
connectToMySQL() is a function in the drizzle-orm codebase, defined in drizzle-kit/src/cli/connections.ts.
Where is connectToMySQL() defined?
connectToMySQL() is defined in drizzle-kit/src/cli/connections.ts at line 741.
What does connectToMySQL() call?
connectToMySQL() calls 2 function(s): checkPackage, parseMysqlCredentials.

Analyze Your Own Codebase

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

Try Supermodel Free