@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
|
@@ -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();
|
|
@@ -1106,29 +1114,37 @@ const createHelpers = (db) => {
|
|
|
1106
1114
|
constraint.onUpdate(onUpdate);
|
|
1107
1115
|
}
|
|
1108
1116
|
};
|
|
1109
|
-
const dropForeignKey = (tableBuilder, foreignKey) => {
|
|
1117
|
+
const dropForeignKey = (tableBuilder, foreignKey, existingForeignKeys) => {
|
|
1110
1118
|
const { name, columns } = foreignKey;
|
|
1119
|
+
if (existingForeignKeys && !existingForeignKeys.some((existingIndex) => existingIndex?.name === name)) {
|
|
1120
|
+
debug$2(`Foreign Key ${name} not found in existing foreign keys. Skipping drop.`);
|
|
1121
|
+
return;
|
|
1122
|
+
}
|
|
1111
1123
|
tableBuilder.dropForeign(columns, name);
|
|
1112
1124
|
};
|
|
1113
1125
|
const createIndex = (tableBuilder, index2) => {
|
|
1114
1126
|
const { type, columns, name } = index2;
|
|
1115
1127
|
switch (type) {
|
|
1116
1128
|
case "primary": {
|
|
1117
|
-
return tableBuilder.primary(columns, name);
|
|
1129
|
+
return tableBuilder.primary(columns, { constraintName: name });
|
|
1118
1130
|
}
|
|
1119
1131
|
case "unique": {
|
|
1120
|
-
return tableBuilder.unique(columns, name);
|
|
1132
|
+
return tableBuilder.unique(columns, { indexName: name });
|
|
1121
1133
|
}
|
|
1122
1134
|
default: {
|
|
1123
1135
|
return tableBuilder.index(columns, name, type);
|
|
1124
1136
|
}
|
|
1125
1137
|
}
|
|
1126
1138
|
};
|
|
1127
|
-
const dropIndex2 = (tableBuilder, index2) => {
|
|
1139
|
+
const dropIndex2 = (tableBuilder, index2, existingIndexes) => {
|
|
1128
1140
|
if (!db.config.settings?.forceMigration) {
|
|
1129
1141
|
return;
|
|
1130
1142
|
}
|
|
1131
1143
|
const { type, columns, name } = index2;
|
|
1144
|
+
if (existingIndexes && !existingIndexes.some((existingIndex) => existingIndex?.name === name)) {
|
|
1145
|
+
debug$2(`Index ${index2.name} not found in existingIndexes. Skipping drop.`);
|
|
1146
|
+
return;
|
|
1147
|
+
}
|
|
1132
1148
|
switch (type) {
|
|
1133
1149
|
case "primary": {
|
|
1134
1150
|
return tableBuilder.dropPrimary(name);
|
|
@@ -1179,32 +1195,36 @@ const createHelpers = (db) => {
|
|
|
1179
1195
|
}
|
|
1180
1196
|
});
|
|
1181
1197
|
};
|
|
1182
|
-
const alterTable = async (schemaBuilder, table
|
|
1183
|
-
|
|
1198
|
+
const alterTable = async (schemaBuilder, table, existingMetadata = {
|
|
1199
|
+
indexes: [],
|
|
1200
|
+
foreignKeys: []
|
|
1201
|
+
}) => {
|
|
1202
|
+
let existingIndexes = [...existingMetadata.indexes];
|
|
1203
|
+
const existingForeignKeys = [...existingMetadata.foreignKeys];
|
|
1204
|
+
const droppedForeignKeyNames = [];
|
|
1205
|
+
await schemaBuilder.alterTable(table.name, async (tableBuilder) => {
|
|
1184
1206
|
for (const removedForeignKey of table.foreignKeys.removed) {
|
|
1185
1207
|
debug$2(`Dropping foreign key ${removedForeignKey.name} on ${table.name}`);
|
|
1186
|
-
dropForeignKey(tableBuilder, removedForeignKey);
|
|
1208
|
+
dropForeignKey(tableBuilder, removedForeignKey, existingForeignKeys);
|
|
1209
|
+
droppedForeignKeyNames.push(removedForeignKey.name);
|
|
1187
1210
|
}
|
|
1188
1211
|
for (const updatedForeignKey of table.foreignKeys.updated) {
|
|
1189
1212
|
debug$2(`Dropping updated foreign key ${updatedForeignKey.name} on ${table.name}`);
|
|
1190
|
-
dropForeignKey(tableBuilder, updatedForeignKey.object);
|
|
1213
|
+
dropForeignKey(tableBuilder, updatedForeignKey.object, existingForeignKeys);
|
|
1214
|
+
droppedForeignKeyNames.push(updatedForeignKey.object.name);
|
|
1215
|
+
}
|
|
1216
|
+
if (db.config.connection.client === "mysql") {
|
|
1217
|
+
existingIndexes = existingIndexes.filter(
|
|
1218
|
+
(index2) => !droppedForeignKeyNames.includes(index2.name)
|
|
1219
|
+
);
|
|
1191
1220
|
}
|
|
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
1221
|
for (const removedIndex of table.indexes.removed) {
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
dropIndex2(tableBuilder, removedIndex);
|
|
1201
|
-
}
|
|
1222
|
+
debug$2(`Dropping index ${removedIndex.name} on ${table.name}`);
|
|
1223
|
+
dropIndex2(tableBuilder, removedIndex, existingIndexes);
|
|
1202
1224
|
}
|
|
1203
1225
|
for (const updatedIndex of table.indexes.updated) {
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
dropIndex2(tableBuilder, updatedIndex.object);
|
|
1207
|
-
}
|
|
1226
|
+
debug$2(`Dropping updated index ${updatedIndex.name} on ${table.name}`);
|
|
1227
|
+
dropIndex2(tableBuilder, updatedIndex.object, existingIndexes);
|
|
1208
1228
|
}
|
|
1209
1229
|
for (const removedColumn of table.columns.removed) {
|
|
1210
1230
|
debug$2(`Dropping column ${removedColumn.name} on ${table.name}`);
|
|
@@ -1237,7 +1257,7 @@ const createHelpers = (db) => {
|
|
|
1237
1257
|
createIndex(tableBuilder, updatedIndex.object);
|
|
1238
1258
|
}
|
|
1239
1259
|
for (const addedForeignKey of table.foreignKeys.added) {
|
|
1240
|
-
debug$2(`Creating foreign
|
|
1260
|
+
debug$2(`Creating foreign key ${addedForeignKey.name} on ${table.name}`);
|
|
1241
1261
|
createForeignKey(tableBuilder, addedForeignKey);
|
|
1242
1262
|
}
|
|
1243
1263
|
for (const addedIndex of table.indexes.added) {
|