migrator.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { readMigrationFiles } from "../migrator.js";
  2. import { sql } from "../sql/sql.js";
  3. async function migrate(db, config) {
  4. const migrations = readMigrationFiles(config);
  5. const migrationsTable = config.migrationsTable ?? "__drizzle_migrations";
  6. const migrationsSchema = config.migrationsSchema ?? "drizzle";
  7. const migrationTableCreate = sql`
  8. CREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} (
  9. id SERIAL PRIMARY KEY,
  10. hash text NOT NULL,
  11. created_at bigint
  12. )
  13. `;
  14. await db.session.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);
  15. await db.session.execute(migrationTableCreate);
  16. const dbMigrations = await db.session.all(
  17. sql`select id, hash, created_at from ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} order by created_at desc limit 1`
  18. );
  19. const lastDbMigration = dbMigrations[0];
  20. const rowsToInsert = [];
  21. for await (const migration of migrations) {
  22. if (!lastDbMigration || Number(lastDbMigration.created_at) < migration.folderMillis) {
  23. for (const stmt of migration.sql) {
  24. await db.session.execute(sql.raw(stmt));
  25. }
  26. rowsToInsert.push(
  27. sql`insert into ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} ("hash", "created_at") values(${migration.hash}, ${migration.folderMillis})`
  28. );
  29. }
  30. }
  31. for await (const rowToInsert of rowsToInsert) {
  32. await db.session.execute(rowToInsert);
  33. }
  34. }
  35. export {
  36. migrate
  37. };
  38. //# sourceMappingURL=migrator.js.map