@strapi/database 5.6.0 → 5.7.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 +53 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +53 -26
- package/dist/index.mjs.map +1 -1
- package/dist/schema/builder.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { Database } from '..';
|
|
2
|
-
import type { Schema } from '../schema';
|
|
2
|
+
import type { ForeignKey, Index, Schema } from '../schema';
|
|
3
3
|
export interface SchemaInspector {
|
|
4
4
|
getSchema(): Promise<Schema>;
|
|
5
|
+
getIndexes(tableName: string): Promise<Index[]>;
|
|
6
|
+
getForeignKeys(tableName: string): Promise<ForeignKey[]>;
|
|
5
7
|
getTables(): Promise<string[]>;
|
|
6
8
|
}
|
|
7
9
|
export default class Dialect {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/dialects/dialect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/dialects/dialect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACzD,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAChC;AAED,MAAM,CAAC,OAAO,OAAO,OAAO;IAC1B,EAAE,EAAE,QAAQ,CAAC;IAEb,eAAe,EAAE,eAAe,CAAyB;IAEzD,MAAM,EAAE,MAAM,CAAC;gBAEH,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;IAMxC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG;IAGd,UAAU,CAAC,iBAAiB,CAAC,EAAE,OAAO;IAI5C,SAAS;IAIT,UAAU,CAAC,IAAI,EAAE,OAAO;IAIxB,mBAAmB;IAInB,eAAe;IAIf,YAAY;IAIZ,gBAAgB;IAIhB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAKtC,iBAAiB;IAIjB,eAAe;IAIrB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAQlD,gBAAgB;CAGjB"}
|
package/dist/index.js
CHANGED
|
@@ -1071,6 +1071,13 @@ const createSchemaBuilder = (db) => {
|
|
|
1071
1071
|
async updateSchema(schemaDiff) {
|
|
1072
1072
|
const forceMigration = db.config.settings?.forceMigration;
|
|
1073
1073
|
await db.dialect.startSchemaUpdate();
|
|
1074
|
+
const existingMetadata = {};
|
|
1075
|
+
for (const table of schemaDiff.tables.updated) {
|
|
1076
|
+
existingMetadata[table.name] = {
|
|
1077
|
+
indexes: await db.dialect.schemaInspector.getIndexes(table.name),
|
|
1078
|
+
foreignKeys: await db.dialect.schemaInspector.getForeignKeys(table.name)
|
|
1079
|
+
};
|
|
1080
|
+
}
|
|
1074
1081
|
await db.connection.transaction(async (trx) => {
|
|
1075
1082
|
await this.createTables(schemaDiff.tables.added, trx);
|
|
1076
1083
|
if (forceMigration) {
|
|
@@ -1088,7 +1095,8 @@ const createSchemaBuilder = (db) => {
|
|
|
1088
1095
|
for (const table of schemaDiff.tables.updated) {
|
|
1089
1096
|
debug$2(`Updating table: ${table.name}`);
|
|
1090
1097
|
const schemaBuilder = this.getSchemaBuilder(trx);
|
|
1091
|
-
|
|
1098
|
+
const { indexes, foreignKeys } = existingMetadata[table.name];
|
|
1099
|
+
await helpers2.alterTable(schemaBuilder, table, { indexes, foreignKeys });
|
|
1092
1100
|
}
|
|
1093
1101
|
});
|
|
1094
1102
|
await db.dialect.endSchemaUpdate();
|
|
@@ -1096,8 +1104,14 @@ const createSchemaBuilder = (db) => {
|
|
|
1096
1104
|
};
|
|
1097
1105
|
};
|
|
1098
1106
|
const createHelpers = (db) => {
|
|
1099
|
-
const createForeignKey = (tableBuilder, foreignKey) => {
|
|
1107
|
+
const createForeignKey = (tableBuilder, foreignKey, existingForeignKeys) => {
|
|
1100
1108
|
const { name, columns, referencedColumns, referencedTable, onDelete, onUpdate } = foreignKey;
|
|
1109
|
+
const existingForeignKey = existingForeignKeys?.find((fk) => fk.name === name);
|
|
1110
|
+
const forceMigration = db.config.settings?.forceMigration;
|
|
1111
|
+
if (existingForeignKey && forceMigration) {
|
|
1112
|
+
debug$2(`Dropping existing foreign key ${name}`);
|
|
1113
|
+
tableBuilder.dropForeign(existingForeignKey.columns, name);
|
|
1114
|
+
}
|
|
1101
1115
|
const constraint = tableBuilder.foreign(columns, name).references(referencedColumns).inTable(db.getSchemaName() ? `${db.getSchemaName()}.${referencedTable}` : referencedTable);
|
|
1102
1116
|
if (onDelete) {
|
|
1103
1117
|
constraint.onDelete(onDelete);
|
|
@@ -1110,25 +1124,34 @@ const createHelpers = (db) => {
|
|
|
1110
1124
|
const { name, columns } = foreignKey;
|
|
1111
1125
|
tableBuilder.dropForeign(columns, name);
|
|
1112
1126
|
};
|
|
1113
|
-
const createIndex = (tableBuilder, index2) => {
|
|
1127
|
+
const createIndex = (tableBuilder, index2, existingIndexes) => {
|
|
1114
1128
|
const { type, columns, name } = index2;
|
|
1129
|
+
const existingIndex = existingIndexes?.find((existing) => existing.name === name);
|
|
1130
|
+
const forceMigration = db.config.settings?.forceMigration;
|
|
1131
|
+
if (forceMigration && existingIndex) {
|
|
1132
|
+
dropIndex2(tableBuilder, index2);
|
|
1133
|
+
}
|
|
1115
1134
|
switch (type) {
|
|
1116
1135
|
case "primary": {
|
|
1117
|
-
return tableBuilder.primary(columns, name);
|
|
1136
|
+
return tableBuilder.primary(columns, { constraintName: name });
|
|
1118
1137
|
}
|
|
1119
1138
|
case "unique": {
|
|
1120
|
-
return tableBuilder.unique(columns, name);
|
|
1139
|
+
return tableBuilder.unique(columns, { indexName: name });
|
|
1121
1140
|
}
|
|
1122
1141
|
default: {
|
|
1123
1142
|
return tableBuilder.index(columns, name, type);
|
|
1124
1143
|
}
|
|
1125
1144
|
}
|
|
1126
1145
|
};
|
|
1127
|
-
const dropIndex2 = (tableBuilder, index2) => {
|
|
1146
|
+
const dropIndex2 = (tableBuilder, index2, existingIndexes) => {
|
|
1128
1147
|
if (!db.config.settings?.forceMigration) {
|
|
1129
1148
|
return;
|
|
1130
1149
|
}
|
|
1131
1150
|
const { type, columns, name } = index2;
|
|
1151
|
+
if (existingIndexes && !existingIndexes.some((existingIndex) => existingIndex?.name === name)) {
|
|
1152
|
+
debug$2(`Index ${index2.name} not found in existingIndexes. Skipping drop.`);
|
|
1153
|
+
return;
|
|
1154
|
+
}
|
|
1132
1155
|
switch (type) {
|
|
1133
1156
|
case "primary": {
|
|
1134
1157
|
return tableBuilder.dropPrimary(name);
|
|
@@ -1179,32 +1202,36 @@ const createHelpers = (db) => {
|
|
|
1179
1202
|
}
|
|
1180
1203
|
});
|
|
1181
1204
|
};
|
|
1182
|
-
const alterTable = async (schemaBuilder, table
|
|
1183
|
-
|
|
1205
|
+
const alterTable = async (schemaBuilder, table, existingMetadata = {
|
|
1206
|
+
indexes: [],
|
|
1207
|
+
foreignKeys: []
|
|
1208
|
+
}) => {
|
|
1209
|
+
let existingIndexes = [...existingMetadata.indexes];
|
|
1210
|
+
const existingForeignKeys = [...existingMetadata.foreignKeys];
|
|
1211
|
+
const droppedForeignKeyNames = [];
|
|
1212
|
+
await schemaBuilder.alterTable(table.name, async (tableBuilder) => {
|
|
1184
1213
|
for (const removedForeignKey of table.foreignKeys.removed) {
|
|
1185
1214
|
debug$2(`Dropping foreign key ${removedForeignKey.name} on ${table.name}`);
|
|
1186
1215
|
dropForeignKey(tableBuilder, removedForeignKey);
|
|
1216
|
+
droppedForeignKeyNames.push(removedForeignKey.name);
|
|
1187
1217
|
}
|
|
1188
1218
|
for (const updatedForeignKey of table.foreignKeys.updated) {
|
|
1189
1219
|
debug$2(`Dropping updated foreign key ${updatedForeignKey.name} on ${table.name}`);
|
|
1190
1220
|
dropForeignKey(tableBuilder, updatedForeignKey.object);
|
|
1221
|
+
droppedForeignKeyNames.push(updatedForeignKey.object.name);
|
|
1222
|
+
}
|
|
1223
|
+
if (db.config.connection.client === "mysql") {
|
|
1224
|
+
existingIndexes = existingIndexes.filter(
|
|
1225
|
+
(index2) => !droppedForeignKeyNames.includes(index2.name)
|
|
1226
|
+
);
|
|
1191
1227
|
}
|
|
1192
|
-
const isMySQL = db.config.connection.client === "mysql";
|
|
1193
|
-
const ignoreForeignKeyNames = isMySQL ? [
|
|
1194
|
-
...table.foreignKeys.removed.map((fk) => fk.name),
|
|
1195
|
-
...table.foreignKeys.updated.map((fk) => fk.name)
|
|
1196
|
-
] : [];
|
|
1197
1228
|
for (const removedIndex of table.indexes.removed) {
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
dropIndex2(tableBuilder, removedIndex);
|
|
1201
|
-
}
|
|
1229
|
+
debug$2(`Dropping index ${removedIndex.name} on ${table.name}`);
|
|
1230
|
+
dropIndex2(tableBuilder, removedIndex, existingIndexes);
|
|
1202
1231
|
}
|
|
1203
1232
|
for (const updatedIndex of table.indexes.updated) {
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
dropIndex2(tableBuilder, updatedIndex.object);
|
|
1207
|
-
}
|
|
1233
|
+
debug$2(`Dropping updated index ${updatedIndex.name} on ${table.name}`);
|
|
1234
|
+
dropIndex2(tableBuilder, updatedIndex.object, existingIndexes);
|
|
1208
1235
|
}
|
|
1209
1236
|
for (const removedColumn of table.columns.removed) {
|
|
1210
1237
|
debug$2(`Dropping column ${removedColumn.name} on ${table.name}`);
|
|
@@ -1230,19 +1257,19 @@ const createHelpers = (db) => {
|
|
|
1230
1257
|
}
|
|
1231
1258
|
for (const updatedForeignKey of table.foreignKeys.updated) {
|
|
1232
1259
|
debug$2(`Recreating updated foreign key ${updatedForeignKey.name} on ${table.name}`);
|
|
1233
|
-
createForeignKey(tableBuilder, updatedForeignKey.object);
|
|
1260
|
+
createForeignKey(tableBuilder, updatedForeignKey.object, existingForeignKeys);
|
|
1234
1261
|
}
|
|
1235
1262
|
for (const updatedIndex of table.indexes.updated) {
|
|
1236
1263
|
debug$2(`Recreating updated index ${updatedIndex.name} on ${table.name}`);
|
|
1237
|
-
createIndex(tableBuilder, updatedIndex.object);
|
|
1264
|
+
createIndex(tableBuilder, updatedIndex.object, existingIndexes);
|
|
1238
1265
|
}
|
|
1239
1266
|
for (const addedForeignKey of table.foreignKeys.added) {
|
|
1240
|
-
debug$2(`Creating foreign
|
|
1241
|
-
createForeignKey(tableBuilder, addedForeignKey);
|
|
1267
|
+
debug$2(`Creating foreign key ${addedForeignKey.name} on ${table.name}`);
|
|
1268
|
+
createForeignKey(tableBuilder, addedForeignKey, existingForeignKeys);
|
|
1242
1269
|
}
|
|
1243
1270
|
for (const addedIndex of table.indexes.added) {
|
|
1244
1271
|
debug$2(`Creating index ${addedIndex.name} on ${table.name}`);
|
|
1245
|
-
createIndex(tableBuilder, addedIndex);
|
|
1272
|
+
createIndex(tableBuilder, addedIndex, existingIndexes);
|
|
1246
1273
|
}
|
|
1247
1274
|
});
|
|
1248
1275
|
};
|