Skip to content

Commit d838ff0

Browse files
authored
Data migrator (#5265)
* Added migrator from migration journal to `bun-sqlite`
1 parent fc31a5f commit d838ff0

3 files changed

Lines changed: 49 additions & 6 deletions

File tree

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,45 @@
1-
import type { MigrationConfig } from '~/migrator.ts';
1+
import type {
2+
MigrationConfig,
3+
MigrationFromJournalConfig,
4+
MigrationMeta,
5+
MigrationsJournal,
6+
MigratorInitFailResponse,
7+
} from '~/migrator.ts';
28
import { readMigrationFiles } from '~/migrator.ts';
39
import type { AnyRelations, EmptyRelations } from '~/relations.ts';
410
import type { SQLiteBunDatabase } from './driver.ts';
511

612
export function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations = EmptyRelations>(
713
db: SQLiteBunDatabase<TSchema, TRelations>,
814
config: MigrationConfig,
9-
) {
10-
const migrations = readMigrationFiles(config);
11-
return db.dialect.migrate(migrations, db.session, config);
15+
): void | MigratorInitFailResponse;
16+
export function migrate<
17+
TSchema extends Record<string, unknown>,
18+
TRelations extends AnyRelations = EmptyRelations,
19+
>(
20+
db: SQLiteBunDatabase<TSchema, TRelations>,
21+
config: MigrationFromJournalConfig | MigrationsJournal,
22+
): void;
23+
export function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations = EmptyRelations>(
24+
db: SQLiteBunDatabase<TSchema, TRelations>,
25+
config: MigrationConfig | MigrationFromJournalConfig | MigrationsJournal,
26+
): void | MigratorInitFailResponse {
27+
if ('migrationsJournal' in config) {
28+
const journal = config.migrationsJournal;
29+
const migrationsTable = config.migrationsTable;
30+
31+
const migrations: MigrationMeta[] = journal.map((d) => ({
32+
sql: d.sql.split('--> statement-breakpoint'),
33+
folderMillis: d.timestamp,
34+
hash: '',
35+
bps: true,
36+
}));
37+
38+
return db.dialect.migrate(migrations, db.session, {
39+
migrationsTable,
40+
});
41+
}
42+
43+
const migrations = readMigrationFiles(config as MigrationConfig);
44+
return db.dialect.migrate(migrations, db.session, config as MigrationConfig);
1245
}

drizzle-orm/src/migrator.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,16 @@ export interface MigrationMeta {
2222
bps: boolean;
2323
}
2424

25+
export interface MigrationFromJournalConfig {
26+
migrationsJournal: MigrationsJournal;
27+
migrationsTable?: string;
28+
}
29+
30+
export type MigrationsJournal = {
31+
sql: string;
32+
timestamp: number;
33+
}[];
34+
2535
/** Only gets returned if migrator failed with `init: true` used by `drizzle-kit pull --init`*/
2636
export interface MigratorInitFailResponse {
2737
exitCode: 'databaseMigrations' | 'localMigrations';

drizzle-orm/src/sqlite-core/dialect.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,7 +1142,7 @@ export class SQLiteSyncDialect extends SQLiteDialect {
11421142
AnyRelations,
11431143
V1.TablesRelationalConfig
11441144
>,
1145-
config?: string | MigrationConfig,
1145+
config?: string | Omit<MigrationConfig, 'migrationsFolder'>,
11461146
): void | MigratorInitFailResponse {
11471147
const migrationsTable = config === undefined
11481148
? '__drizzle_migrations'
@@ -1222,7 +1222,7 @@ export class SQLiteAsyncDialect extends SQLiteDialect {
12221222
AnyRelations,
12231223
V1.TablesRelationalConfig
12241224
>,
1225-
config?: string | MigrationConfig,
1225+
config?: string | Omit<MigrationConfig, 'migrationsFolder'>,
12261226
): Promise<void | MigratorInitFailResponse> {
12271227
const migrationsTable = config === undefined
12281228
? '__drizzle_migrations'

0 commit comments

Comments
 (0)