@forestadmin/datasource-sql 1.7.25 → 1.7.27
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cm9zcGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludHJvc3BlY3Rpb24vaW50cm9zcGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EseUNBQTJEO0FBRTNELDBGQUFnRTtBQUNoRSxzRkFBNEQ7QUFJNUQsTUFBcUIsWUFBWTtJQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFvQixFQUFFLE1BQWU7UUFDM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsNkRBQTZEO0lBQ3JELE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQW9CO1FBQ3JELE1BQU0sS0FBSyxHQUF1QyxNQUFNLFNBQVM7YUFDOUQsaUJBQWlCLEVBQUU7YUFDbkIsYUFBYSxFQUFFLENBQUM7UUFFbkIsb0RBQW9EO1FBQ3BELDZFQUE2RTtRQUM3RSxvREFBb0Q7UUFDcEQsMkZBQTJGO1FBQzNGLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxpQ0FBaUM7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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/datasource-sql",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.27",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"directory": "packages/datasource-sql"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@forestadmin/datasource-sequelize": "1.5.
|
|
16
|
-
"@forestadmin/datasource-toolkit": "1.
|
|
15
|
+
"@forestadmin/datasource-sequelize": "1.5.15",
|
|
16
|
+
"@forestadmin/datasource-toolkit": "1.22.0",
|
|
17
17
|
"pluralize": "^8.0.0",
|
|
18
18
|
"sequelize": "^6.28.0",
|
|
19
19
|
"socks": "^2.7.1",
|