mirror of
https://github.com/strapi/strapi.git
synced 2025-11-12 08:08:05 +00:00
fix(database): drop foreign keys before dropping indexes
This commit is contained in:
parent
6c76c1b8c2
commit
2264b66ec3
@ -248,16 +248,7 @@ const createHelpers = (db: Database) => {
|
|||||||
await schemaBuilder.alterTable(table.name, (tableBuilder) => {
|
await schemaBuilder.alterTable(table.name, (tableBuilder) => {
|
||||||
// Delete indexes / fks / columns
|
// Delete indexes / fks / columns
|
||||||
|
|
||||||
for (const removedIndex of table.indexes.removed) {
|
// Drop foreign keys first to avoid foreign key errors in the following steps
|
||||||
debug(`Dropping index ${removedIndex.name} on ${table.name}`);
|
|
||||||
dropIndex(tableBuilder, removedIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const updateddIndex of table.indexes.updated) {
|
|
||||||
debug(`Dropping updated index ${updateddIndex.name} on ${table.name}`);
|
|
||||||
dropIndex(tableBuilder, updateddIndex.object);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const removedForeignKey of table.foreignKeys.removed) {
|
for (const removedForeignKey of table.foreignKeys.removed) {
|
||||||
debug(`Dropping foreign key ${removedForeignKey.name} on ${table.name}`);
|
debug(`Dropping foreign key ${removedForeignKey.name} on ${table.name}`);
|
||||||
dropForeignKey(tableBuilder, removedForeignKey);
|
dropForeignKey(tableBuilder, removedForeignKey);
|
||||||
@ -273,6 +264,29 @@ const createHelpers = (db: Database) => {
|
|||||||
dropColumn(tableBuilder, removedColumn);
|
dropColumn(tableBuilder, removedColumn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for mysql only, dropForeignKey also removes the index, so don't drop it twice
|
||||||
|
const isMySQL = db.config.connection.client === 'mysql';
|
||||||
|
const ignoreForeignKeyNames = isMySQL
|
||||||
|
? [
|
||||||
|
...table.foreignKeys.removed.map((fk) => fk.name),
|
||||||
|
...table.foreignKeys.updated.map((fk) => fk.name),
|
||||||
|
]
|
||||||
|
: [];
|
||||||
|
|
||||||
|
for (const removedIndex of table.indexes.removed) {
|
||||||
|
if (!ignoreForeignKeyNames.includes(removedIndex.name)) {
|
||||||
|
debug(`Dropping index ${removedIndex.name} on ${table.name}`);
|
||||||
|
dropIndex(tableBuilder, removedIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const updatedIndex of table.indexes.updated) {
|
||||||
|
if (!ignoreForeignKeyNames.includes(updatedIndex.name)) {
|
||||||
|
debug(`Dropping updated index ${updatedIndex.name} on ${table.name}`);
|
||||||
|
dropIndex(tableBuilder, updatedIndex.object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Update existing columns / foreign keys / indexes
|
// Update existing columns / foreign keys / indexes
|
||||||
for (const updatedColumn of table.columns.updated) {
|
for (const updatedColumn of table.columns.updated) {
|
||||||
debug(`Updating column ${updatedColumn.name} on ${table.name}`);
|
debug(`Updating column ${updatedColumn.name} on ${table.name}`);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user