@strapi/database 5.7.0-beta.0 → 5.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dialects/dialect.d.ts +3 -1
- package/dist/dialects/dialect.d.ts.map +1 -1
- package/dist/index.js +43 -23
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +43 -23
- package/dist/index.mjs.map +1 -1
- package/dist/schema/builder.d.ts.map +1 -1
- package/package.json +5 -6
package/dist/index.mjs
CHANGED
|
@@ -1039,6 +1039,13 @@ const createSchemaBuilder = (db) => {
|
|
|
1039
1039
|
async updateSchema(schemaDiff) {
|
|
1040
1040
|
const forceMigration = db.config.settings?.forceMigration;
|
|
1041
1041
|
await db.dialect.startSchemaUpdate();
|
|
1042
|
+
const existingMetadata = {};
|
|
1043
|
+
for (const table of schemaDiff.tables.updated) {
|
|
1044
|
+
existingMetadata[table.name] = {
|
|
1045
|
+
indexes: await db.dialect.schemaInspector.getIndexes(table.name),
|
|
1046
|
+
foreignKeys: await db.dialect.schemaInspector.getForeignKeys(table.name)
|
|
1047
|
+
};
|
|
1048
|
+
}
|
|
1042
1049
|
await db.connection.transaction(async (trx) => {
|
|
1043
1050
|
await this.createTables(schemaDiff.tables.added, trx);
|
|
1044
1051
|
if (forceMigration) {
|
|
@@ -1056,7 +1063,8 @@ const createSchemaBuilder = (db) => {
|
|
|
1056
1063
|
for (const table of schemaDiff.tables.updated) {
|
|
1057
1064
|
debug$2(`Updating table: ${table.name}`);
|
|
1058
1065
|
const schemaBuilder = this.getSchemaBuilder(trx);
|
|
1059
|
-
|
|
1066
|
+
const { indexes, foreignKeys } = existingMetadata[table.name];
|
|
1067
|
+
await helpers2.alterTable(schemaBuilder, table, { indexes, foreignKeys });
|
|
1060
1068
|
}
|
|
1061
1069
|
});
|
|
1062
1070
|
await db.dialect.endSchemaUpdate();
|
|
@@ -1074,29 +1082,37 @@ const createHelpers = (db) => {
|
|
|
1074
1082
|
constraint.onUpdate(onUpdate);
|
|
1075
1083
|
}
|
|
1076
1084
|
};
|
|
1077
|
-
const dropForeignKey = (tableBuilder, foreignKey) => {
|
|
1085
|
+
const dropForeignKey = (tableBuilder, foreignKey, existingForeignKeys) => {
|
|
1078
1086
|
const { name, columns } = foreignKey;
|
|
1087
|
+
if (existingForeignKeys && !existingForeignKeys.some((existingIndex) => existingIndex?.name === name)) {
|
|
1088
|
+
debug$2(`Foreign Key ${name} not found in existing foreign keys. Skipping drop.`);
|
|
1089
|
+
return;
|
|
1090
|
+
}
|
|
1079
1091
|
tableBuilder.dropForeign(columns, name);
|
|
1080
1092
|
};
|
|
1081
1093
|
const createIndex = (tableBuilder, index2) => {
|
|
1082
1094
|
const { type, columns, name } = index2;
|
|
1083
1095
|
switch (type) {
|
|
1084
1096
|
case "primary": {
|
|
1085
|
-
return tableBuilder.primary(columns, name);
|
|
1097
|
+
return tableBuilder.primary(columns, { constraintName: name });
|
|
1086
1098
|
}
|
|
1087
1099
|
case "unique": {
|
|
1088
|
-
return tableBuilder.unique(columns, name);
|
|
1100
|
+
return tableBuilder.unique(columns, { indexName: name });
|
|
1089
1101
|
}
|
|
1090
1102
|
default: {
|
|
1091
1103
|
return tableBuilder.index(columns, name, type);
|
|
1092
1104
|
}
|
|
1093
1105
|
}
|
|
1094
1106
|
};
|
|
1095
|
-
const dropIndex2 = (tableBuilder, index2) => {
|
|
1107
|
+
const dropIndex2 = (tableBuilder, index2, existingIndexes) => {
|
|
1096
1108
|
if (!db.config.settings?.forceMigration) {
|
|
1097
1109
|
return;
|
|
1098
1110
|
}
|
|
1099
1111
|
const { type, columns, name } = index2;
|
|
1112
|
+
if (existingIndexes && !existingIndexes.some((existingIndex) => existingIndex?.name === name)) {
|
|
1113
|
+
debug$2(`Index ${index2.name} not found in existingIndexes. Skipping drop.`);
|
|
1114
|
+
return;
|
|
1115
|
+
}
|
|
1100
1116
|
switch (type) {
|
|
1101
1117
|
case "primary": {
|
|
1102
1118
|
return tableBuilder.dropPrimary(name);
|
|
@@ -1147,32 +1163,36 @@ const createHelpers = (db) => {
|
|
|
1147
1163
|
}
|
|
1148
1164
|
});
|
|
1149
1165
|
};
|
|
1150
|
-
const alterTable = async (schemaBuilder, table
|
|
1151
|
-
|
|
1166
|
+
const alterTable = async (schemaBuilder, table, existingMetadata = {
|
|
1167
|
+
indexes: [],
|
|
1168
|
+
foreignKeys: []
|
|
1169
|
+
}) => {
|
|
1170
|
+
let existingIndexes = [...existingMetadata.indexes];
|
|
1171
|
+
const existingForeignKeys = [...existingMetadata.foreignKeys];
|
|
1172
|
+
const droppedForeignKeyNames = [];
|
|
1173
|
+
await schemaBuilder.alterTable(table.name, async (tableBuilder) => {
|
|
1152
1174
|
for (const removedForeignKey of table.foreignKeys.removed) {
|
|
1153
1175
|
debug$2(`Dropping foreign key ${removedForeignKey.name} on ${table.name}`);
|
|
1154
|
-
dropForeignKey(tableBuilder, removedForeignKey);
|
|
1176
|
+
dropForeignKey(tableBuilder, removedForeignKey, existingForeignKeys);
|
|
1177
|
+
droppedForeignKeyNames.push(removedForeignKey.name);
|
|
1155
1178
|
}
|
|
1156
1179
|
for (const updatedForeignKey of table.foreignKeys.updated) {
|
|
1157
1180
|
debug$2(`Dropping updated foreign key ${updatedForeignKey.name} on ${table.name}`);
|
|
1158
|
-
dropForeignKey(tableBuilder, updatedForeignKey.object);
|
|
1181
|
+
dropForeignKey(tableBuilder, updatedForeignKey.object, existingForeignKeys);
|
|
1182
|
+
droppedForeignKeyNames.push(updatedForeignKey.object.name);
|
|
1183
|
+
}
|
|
1184
|
+
if (db.config.connection.client === "mysql") {
|
|
1185
|
+
existingIndexes = existingIndexes.filter(
|
|
1186
|
+
(index2) => !droppedForeignKeyNames.includes(index2.name)
|
|
1187
|
+
);
|
|
1159
1188
|
}
|
|
1160
|
-
const isMySQL = db.config.connection.client === "mysql";
|
|
1161
|
-
const ignoreForeignKeyNames = isMySQL ? [
|
|
1162
|
-
...table.foreignKeys.removed.map((fk) => fk.name),
|
|
1163
|
-
...table.foreignKeys.updated.map((fk) => fk.name)
|
|
1164
|
-
] : [];
|
|
1165
1189
|
for (const removedIndex of table.indexes.removed) {
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
dropIndex2(tableBuilder, removedIndex);
|
|
1169
|
-
}
|
|
1190
|
+
debug$2(`Dropping index ${removedIndex.name} on ${table.name}`);
|
|
1191
|
+
dropIndex2(tableBuilder, removedIndex, existingIndexes);
|
|
1170
1192
|
}
|
|
1171
1193
|
for (const updatedIndex of table.indexes.updated) {
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
dropIndex2(tableBuilder, updatedIndex.object);
|
|
1175
|
-
}
|
|
1194
|
+
debug$2(`Dropping updated index ${updatedIndex.name} on ${table.name}`);
|
|
1195
|
+
dropIndex2(tableBuilder, updatedIndex.object, existingIndexes);
|
|
1176
1196
|
}
|
|
1177
1197
|
for (const removedColumn of table.columns.removed) {
|
|
1178
1198
|
debug$2(`Dropping column ${removedColumn.name} on ${table.name}`);
|
|
@@ -1205,7 +1225,7 @@ const createHelpers = (db) => {
|
|
|
1205
1225
|
createIndex(tableBuilder, updatedIndex.object);
|
|
1206
1226
|
}
|
|
1207
1227
|
for (const addedForeignKey of table.foreignKeys.added) {
|
|
1208
|
-
debug$2(`Creating foreign
|
|
1228
|
+
debug$2(`Creating foreign key ${addedForeignKey.name} on ${table.name}`);
|
|
1209
1229
|
createForeignKey(tableBuilder, addedForeignKey);
|
|
1210
1230
|
}
|
|
1211
1231
|
for (const addedIndex of table.indexes.added) {
|