@forestadmin/datasource-sql 1.7.25 → 1.7.26
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.
|
@@ -28,19 +28,17 @@ class Introspector {
|
|
|
28
28
|
/** Instrospect a single table */
|
|
29
29
|
static async getTable(sequelize, logger, tableName) {
|
|
30
30
|
const queryInterface = sequelize.getQueryInterface();
|
|
31
|
-
const [columnDescriptions, tableIndexes, tableReferences
|
|
31
|
+
const [columnDescriptions, tableIndexes, tableReferences] = await Promise.all([
|
|
32
32
|
queryInterface.describeTable(tableName),
|
|
33
33
|
queryInterface.showIndex(tableName),
|
|
34
34
|
queryInterface.getForeignKeyReferencesForTable(tableName),
|
|
35
|
-
sequelize.query(`SELECT constraint_name, table_name from information_schema.table_constraints
|
|
36
|
-
where table_name = :tableName and constraint_type = 'FOREIGN KEY';`, { replacements: { tableName }, type: sequelize_1.QueryTypes.SELECT }),
|
|
37
35
|
]);
|
|
36
|
+
await this.detectBrokenRelationship(tableName, sequelize, tableReferences, logger);
|
|
38
37
|
const columns = await Promise.all(Object.entries(columnDescriptions).map(async ([name, description]) => {
|
|
39
38
|
const references = tableReferences.filter(r => r.columnName === name);
|
|
40
39
|
const options = { name, description, references };
|
|
41
40
|
return this.getColumn(sequelize, logger, tableName, options);
|
|
42
41
|
}));
|
|
43
|
-
this.detectBrokenRelationship(constraintNamesForForeignKey, tableReferences, logger);
|
|
44
42
|
return {
|
|
45
43
|
name: tableName,
|
|
46
44
|
columns: columns.filter(Boolean),
|
|
@@ -96,7 +94,23 @@ class Introspector {
|
|
|
96
94
|
}
|
|
97
95
|
}
|
|
98
96
|
}
|
|
99
|
-
static detectBrokenRelationship(
|
|
97
|
+
static async detectBrokenRelationship(tableName, sequelize, tableReferences, logger) {
|
|
98
|
+
let constraintNamesForForeignKey = [];
|
|
99
|
+
const dialect = sequelize.getDialect();
|
|
100
|
+
if (dialect === 'sqlite') {
|
|
101
|
+
constraintNamesForForeignKey = await sequelize.query(`SELECT "from" as constraint_name, :tableName as table_name
|
|
102
|
+
from pragma_foreign_key_list(:tableName);`, {
|
|
103
|
+
replacements: { tableName },
|
|
104
|
+
type: sequelize_1.QueryTypes.SELECT,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
constraintNamesForForeignKey = await sequelize.query(`SELECT constraint_name, table_name from information_schema.table_constraints
|
|
109
|
+
where table_name = :tableName and constraint_type = 'FOREIGN KEY';`, { replacements: { tableName }, type: sequelize_1.QueryTypes.SELECT });
|
|
110
|
+
}
|
|
111
|
+
this.logBrokenRelationship(constraintNamesForForeignKey, tableReferences, logger);
|
|
112
|
+
}
|
|
113
|
+
static logBrokenRelationship(constraintNamesForForeignKey, tableReferences, logger) {
|
|
100
114
|
if (constraintNamesForForeignKey.length !== tableReferences.length) {
|
|
101
115
|
const constraintNames = new Set(constraintNamesForForeignKey.map(c => ({ constraint_name: c.constraint_name, table_name: c.table_name })));
|
|
102
116
|
tableReferences.forEach(({ constraintName }) => {
|
|
@@ -115,4 +129,4 @@ class Introspector {
|
|
|
115
129
|
}
|
|
116
130
|
}
|
|
117
131
|
exports.default = Introspector;
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cm9zcGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludHJvc3BlY3Rpb24vaW50cm9zcGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EseUNBQTJEO0FBRTNELDBGQUFnRTtBQUNoRSxzRkFBNEQ7QUFJNUQsTUFBcUIsWUFBWTtJQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFvQixFQUFFLE1BQWU7UUFDM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsNkRBQTZEO0lBQ3JELE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQW9CO1FBQ3JELE1BQU0sS0FBSyxHQUF1QyxNQUFNLFNBQVM7YUFDOUQsaUJBQWlCLEVBQUU7YUFDbkIsYUFBYSxFQUFFLENBQUM7UUFFbkIsb0RBQW9EO1FBQ3BELDZFQUE2RTtRQUM3RSxvREFBb0Q7UUFDcEQsMkZBQTJGO1FBQzNGLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxpQ0FBaUM7SUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzNCLFNBQW9CLEVBQ3BCLE1BQWMsRUFDZCxTQUFpQjtRQUVqQixNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsaUJBQWlCLEVBQXVCLENBQUM7UUFFMUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDNUUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7WUFDdkMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7WUFDbkMsY0FBYyxDQUFDLCtCQUErQixDQUFDLFNBQVMsQ0FBQztTQUMxRCxDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuRixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDbkUsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDdEUsTUFBTSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBRWxELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsT0FBTztZQUNMLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2hDLE1BQU0sRUFBRSxZQUFZO2lCQUNqQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7aUJBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQzVCLFNBQW9CLEVBQ3BCLE1BQWMsRUFDZCxTQUFpQixFQUNqQixPQUlDO1FBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQWEsQ0FBQztRQUNsRCxNQUFNLGFBQWEsR0FBRyxJQUFJLDRCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXRELElBQUk7WUFDRixNQUFNLElBQUksR0FBRyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN2RSxNQUFNLE1BQU0sR0FBRyxJQUFJLDhCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRS9DLDJFQUEyRTtZQUMzRSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQzNCLFdBQVcsQ0FBQyxhQUFhLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUNsRixDQUFDO1lBRUYsT0FBTztnQkFDTCxJQUFJO2dCQUNKLGFBQWE7Z0JBQ2IsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO2dCQUNqRixxQkFBcUIsRUFBRSxhQUFhO29CQUNsQyxDQUFDLENBQUMsS0FBSztvQkFDUCxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztnQkFDcEQsSUFBSTtnQkFDSixTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVM7Z0JBQ2hDLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVTtnQkFDbEMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNoQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtvQkFDNUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxvQkFBb0I7aUJBQy9CLENBQUMsQ0FBQzthQUNKLENBQUM7U0FDSDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLG1CQUFtQixTQUFTLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1NBQ3pFO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBZTtRQUM1QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtZQUMxQixvRkFBb0Y7WUFDcEYsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUMxQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQ25FLENBQUM7WUFFRixLQUFLLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xDLGtFQUFrRTtnQkFDbEUsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMvRCxNQUFNLFNBQVMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUU1RSxPQUFPLFFBQVEsSUFBSSxTQUFTLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUMzQyxTQUFpQixFQUNqQixTQUFvQixFQUNwQixlQUFxQyxFQUNyQyxNQUFjO1FBRWQsSUFBSSw0QkFBNEIsR0FBMkQsRUFBRSxDQUFDO1FBQzlGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQWEsQ0FBQztRQUVsRCxJQUFJLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDeEIsNEJBQTRCLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUlsRDtrREFDMEMsRUFDMUM7Z0JBQ0UsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFO2dCQUMzQixJQUFJLEVBQUUsc0JBQVUsQ0FBQyxNQUFNO2FBQ3hCLENBQ0YsQ0FBQztTQUNIO2FBQU07WUFDTCw0QkFBNEIsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBSWxEOzZFQUNxRSxFQUNyRSxFQUFFLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxzQkFBVSxDQUFDLE1BQU0sRUFBRSxDQUN6RCxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMscUJBQXFCLENBQUMsNEJBQTRCLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTyxNQUFNLENBQUMscUJBQXFCLENBQ2xDLDRCQUF1QyxFQUN2QyxlQUFxQyxFQUNyQyxNQUFjO1FBRWQsSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUNsRSxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FDNUIsNEJBQWtGLENBQUMsR0FBRyxDQUNyRixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3hFLENBQ0YsQ0FBQztZQUNGLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUU7Z0JBQzdDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzVCLElBQUksR0FBRyxDQUFDLGVBQWUsS0FBSyxjQUFjLEVBQUU7d0JBQzFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzdCO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLEVBQUUsQ0FDTixPQUFPO2dCQUNQLG1DQUFtQztnQkFDbkMsMkNBQTJDLEdBQUcsQ0FBQyxlQUFlLGVBQWUsR0FBRyxDQUFDLFVBQVUsa0NBQWtDLENBQzlILENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztDQUNGO0FBM0xELCtCQTJMQyJ9
|