46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
import { Migration } from '@nocobase/server';
|
|
|
|
export default class DropForeignKeysMigration extends Migration {
|
|
async up() {
|
|
const result = await this.app.version.satisfies('<=0.7.1-alpha.7');
|
|
if (!result) {
|
|
return;
|
|
}
|
|
const transaction = await this.db.sequelize.transaction();
|
|
try {
|
|
if (this.db.inDialect('mysql')) {
|
|
const [results]: any = await this.db.sequelize.query(
|
|
`
|
|
SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,' ;') as q
|
|
FROM information_schema.TABLE_CONSTRAINTS c
|
|
WHERE c.TABLE_SCHEMA='${this.db.options.database}' AND c.CONSTRAINT_TYPE='FOREIGN KEY';
|
|
`,
|
|
{ transaction },
|
|
);
|
|
for (const result of results) {
|
|
await this.db.sequelize.query(result.q as any, { transaction });
|
|
}
|
|
} else if (this.db.inDialect('postgres')) {
|
|
const [results]: any = await this.db.sequelize.query(
|
|
`
|
|
select 'alter table '||quote_ident(tb.relname)||
|
|
' drop constraint '||quote_ident(conname)||';' as q
|
|
from pg_constraint c
|
|
join pg_class tb on tb.oid = c.conrelid
|
|
join pg_namespace ns on ns.oid = tb.relnamespace
|
|
where ns.nspname in ('public')
|
|
and c.contype = 'f';
|
|
`,
|
|
{ transaction },
|
|
);
|
|
for (const result of results) {
|
|
await this.db.sequelize.query(result.q as any, { transaction });
|
|
}
|
|
}
|
|
await transaction.commit();
|
|
} catch (error) {
|
|
await transaction.rollback();
|
|
}
|
|
}
|
|
}
|