MySqlDialect Class — drizzle-orm Architecture
Architecture documentation for the MySqlDialect class in dialect.ts from the drizzle-orm codebase.
Entity Profile
Dependency Diagram
graph TD 9c5eee4c_4b78_a585_4038_d710de212097["MySqlDialect"] 8f4067ff_24d4_558a_f9a8_8c5b4d708ae5["dialect.ts"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|defined in| 8f4067ff_24d4_558a_f9a8_8c5b4d708ae5 68cf8bf4_2ee3_8fcf_5f5e_5ce21942f7b5["constructor()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| 68cf8bf4_2ee3_8fcf_5f5e_5ce21942f7b5 fa772623_beb4_6a0e_616a_092d0565b6b1["migrate()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| fa772623_beb4_6a0e_616a_092d0565b6b1 84c9e128_822c_2603_7477_397edc64e84d["escapeName()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| 84c9e128_822c_2603_7477_397edc64e84d 5c36d413_68ec_3851_3a86_541be5ff068a["escapeParam()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| 5c36d413_68ec_3851_3a86_541be5ff068a 2b28f0b1_d7dc_61db_92c1_ff9bb6834021["escapeString()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| 2b28f0b1_d7dc_61db_92c1_ff9bb6834021 36b61a5b_7f68_2e43_5760_d461578993f6["buildWithCTE()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| 36b61a5b_7f68_2e43_5760_d461578993f6 6603fb43_ff6f_ad94_0e94_0f152d804075["buildDeleteQuery()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| 6603fb43_ff6f_ad94_0e94_0f152d804075 c6198a58_c2ac_3eb3_3e9d_7a26c6ff0e76["buildUpdateSet()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| c6198a58_c2ac_3eb3_3e9d_7a26c6ff0e76 8f9fa658_edb5_f102_51bb_be11ee53973b["buildUpdateQuery()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| 8f9fa658_edb5_f102_51bb_be11ee53973b d2bb0977_2845_5bd0_d019_e55f619ef7e8["buildSelection()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| d2bb0977_2845_5bd0_d019_e55f619ef7e8 6b198fad_61da_d3c6_6497_9634ac05c48a["buildLimit()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| 6b198fad_61da_d3c6_6497_9634ac05c48a 1a6d3dd7_66dd_323c_34ba_58c1bebc1ede["buildOrderBy()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| 1a6d3dd7_66dd_323c_34ba_58c1bebc1ede 7c20c441_cfa6_cf8b_7c30_26d754c4801b["buildIndex()"] 9c5eee4c_4b78_a585_4038_d710de212097 -->|method| 7c20c441_cfa6_cf8b_7c30_26d754c4801b
Relationship Graph
Source Code
drizzle-orm/src/mysql-core/dialect.ts lines 44–1169
export class MySqlDialect {
static readonly [entityKind]: string = 'MySqlDialect';
/** @internal */
readonly casing: CasingCache;
constructor(config?: MySqlDialectConfig) {
this.casing = new CasingCache(config?.casing);
}
async migrate(
migrations: MigrationMeta[],
session: MySqlSession,
config: Omit<MigrationConfig, 'migrationsSchema'>,
): Promise<void> {
const migrationsTable = config.migrationsTable ?? '__drizzle_migrations';
const migrationTableCreate = sql`
create table if not exists ${sql.identifier(migrationsTable)} (
id serial primary key,
hash text not null,
created_at bigint
)
`;
await session.execute(migrationTableCreate);
const dbMigrations = await session.all<{ id: number; hash: string; created_at: string }>(
sql`select id, hash, created_at from ${sql.identifier(migrationsTable)} order by created_at desc limit 1`,
);
const lastDbMigration = dbMigrations[0];
await session.transaction(async (tx) => {
for (const migration of migrations) {
if (
!lastDbMigration
|| Number(lastDbMigration.created_at) < migration.folderMillis
) {
for (const stmt of migration.sql) {
await tx.execute(sql.raw(stmt));
}
await tx.execute(
sql`insert into ${
sql.identifier(migrationsTable)
} (\`hash\`, \`created_at\`) values(${migration.hash}, ${migration.folderMillis})`,
);
}
}
});
}
escapeName(name: string): string {
return `\`${name}\``;
}
escapeParam(_num: number): string {
return `?`;
}
escapeString(str: string): string {
return `'${str.replace(/'/g, "''")}'`;
}
private buildWithCTE(queries: Subquery[] | undefined): SQL | undefined {
if (!queries?.length) return undefined;
const withSqlChunks = [sql`with `];
for (const [i, w] of queries.entries()) {
withSqlChunks.push(sql`${sql.identifier(w._.alias)} as (${w._.sql})`);
if (i < queries.length - 1) {
withSqlChunks.push(sql`, `);
}
}
withSqlChunks.push(sql` `);
return sql.join(withSqlChunks);
}
buildDeleteQuery({ table, where, returning, withList, limit, orderBy }: MySqlDeleteConfig): SQL {
const withSql = this.buildWithCTE(withList);
const returningSql = returning
? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`
Domain
Defined In
Source
Frequently Asked Questions
What is the MySqlDialect class?
MySqlDialect is a class in the drizzle-orm codebase, defined in drizzle-orm/src/mysql-core/dialect.ts.
Where is MySqlDialect defined?
MySqlDialect is defined in drizzle-orm/src/mysql-core/dialect.ts at line 44.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free