diff --git a/.changeset/fifty-geckos-end.md b/.changeset/fifty-geckos-end.md new file mode 100644 index 0000000000..60cc90d05f --- /dev/null +++ b/.changeset/fifty-geckos-end.md @@ -0,0 +1,5 @@ +--- +"@medusajs/utils": patch +--- + +chore(utils): patch unique index migration diff --git a/packages/core/utils/src/dal/mikro-orm/__tests__/ts-migration-generator.spec.ts b/packages/core/utils/src/dal/mikro-orm/__tests__/ts-migration-generator.spec.ts index 9135826e3d..e9ad584c22 100644 --- a/packages/core/utils/src/dal/mikro-orm/__tests__/ts-migration-generator.spec.ts +++ b/packages/core/utils/src/dal/mikro-orm/__tests__/ts-migration-generator.spec.ts @@ -1,7 +1,7 @@ import { CustomTsMigrationGenerator } from "../mikro-orm-create-connection" function unwrapSql(sql: string) { - return sql.toString().match(/this.addSql\(`(.*?)`\)/)?.[1] + return sql.toString().match(/this.addSql\(`([\s\S]*?)`\)/m)?.[1] } describe("CustomTsMigrationGenerator", () => { diff --git a/packages/core/utils/src/dal/mikro-orm/mikro-orm-create-connection.ts b/packages/core/utils/src/dal/mikro-orm/mikro-orm-create-connection.ts index aba4d1a84d..0a3574997f 100644 --- a/packages/core/utils/src/dal/mikro-orm/mikro-orm-create-connection.ts +++ b/packages/core/utils/src/dal/mikro-orm/mikro-orm-create-connection.ts @@ -7,6 +7,42 @@ import { normalizeMigrationSQL } from "../utils" type FilterDef = Parameters[0] export class CustomTsMigrationGenerator extends TSMigrationGenerator { + // TODO: temporary fix to drop unique constraint before creating unique index + private dropUniqueConstraintBeforeUniqueIndex( + sqlPatches: string[], + sql: string + ) { + // DML unique index + const uniqueIndexName = sql.match(/"IDX_(.+?)_unique"/)?.[1] + if (!uniqueIndexName) { + return + } + + // Add drop unique constraint if it exists, using the same name as index without IDX_ prefix + const tableName = sql.match(/ON "(.+?)"/)?.[1] + if (tableName) { + sqlPatches.push( + `alter table if exists "${tableName}" drop constraint if exists "${uniqueIndexName}_unique";` + ) + } + } + + generateMigrationFile( + className: string, + diff: { up: string[]; down: string[] } + ): string { + const sqlPatches: string[] = [] + for (const sql of diff.up) { + this.dropUniqueConstraintBeforeUniqueIndex(sqlPatches, sql) + } + + for (const sql of sqlPatches) { + diff.up.unshift(sql) + } + + return super.generateMigrationFile(className, diff) + } + createStatement(sql: string, padLeft: number): string { if (isString(sql)) { sql = normalizeMigrationSQL(sql)