@forestadmin/datasource-sql 1.7.14 → 1.7.16
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.
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const sequelize_1 = require("sequelize");
|
|
6
7
|
const default_value_parser_1 = __importDefault(require("./helpers/default-value-parser"));
|
|
7
8
|
const sql_type_converter_1 = __importDefault(require("./helpers/sql-type-converter"));
|
|
8
9
|
class Introspector {
|
|
@@ -26,22 +27,23 @@ class Introspector {
|
|
|
26
27
|
}
|
|
27
28
|
/** Instrospect a single table */
|
|
28
29
|
static async getTable(sequelize, logger, tableName) {
|
|
29
|
-
// Load columns descriptions, indexes and references of the current table.
|
|
30
30
|
const queryInterface = sequelize.getQueryInterface();
|
|
31
|
-
const [columnDescriptions, tableIndexes, tableReferences] = await Promise.all([
|
|
31
|
+
const [columnDescriptions, tableIndexes, tableReferences, constraintNamesForForeignKey] = 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 }),
|
|
35
37
|
]);
|
|
36
|
-
|
|
37
|
-
const columns = Object.entries(columnDescriptions).map(([name, description]) => {
|
|
38
|
+
const columns = await Promise.all(Object.entries(columnDescriptions).map(async ([name, description]) => {
|
|
38
39
|
const references = tableReferences.filter(r => r.columnName === name);
|
|
39
40
|
const options = { name, description, references };
|
|
40
41
|
return this.getColumn(sequelize, logger, tableName, options);
|
|
41
|
-
});
|
|
42
|
+
}));
|
|
43
|
+
this.detectBrokenRelationship(constraintNamesForForeignKey, tableReferences, logger);
|
|
42
44
|
return {
|
|
43
45
|
name: tableName,
|
|
44
|
-
columns:
|
|
46
|
+
columns: columns.filter(Boolean),
|
|
45
47
|
unique: tableIndexes
|
|
46
48
|
.filter(i => i.unique || i.primary)
|
|
47
49
|
.map(i => i.fields.map(f => f.attribute)),
|
|
@@ -94,6 +96,23 @@ class Introspector {
|
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
98
|
}
|
|
99
|
+
static detectBrokenRelationship(constraintNamesForForeignKey, tableReferences, logger) {
|
|
100
|
+
if (constraintNamesForForeignKey.length !== tableReferences.length) {
|
|
101
|
+
const constraintNames = new Set(constraintNamesForForeignKey.map(c => ({ constraint_name: c.constraint_name, table_name: c.table_name })));
|
|
102
|
+
tableReferences.forEach(({ constraintName }) => {
|
|
103
|
+
constraintNames.forEach(obj => {
|
|
104
|
+
if (obj.constraint_name === constraintName) {
|
|
105
|
+
constraintNames.delete(obj);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
constraintNames.forEach(obj => {
|
|
110
|
+
logger?.('Error',
|
|
111
|
+
// eslint-disable-next-line max-len
|
|
112
|
+
`Failed to load constraints on relation '${obj.constraint_name}' on table '${obj.table_name}'. The relation will be ignored.`);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
97
116
|
}
|
|
98
117
|
exports.default = Introspector;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# 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.16",
|
|
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.5",
|
|
16
|
+
"@forestadmin/datasource-toolkit": "1.13.0",
|
|
17
17
|
"pluralize": "^8.0.0",
|
|
18
18
|
"sequelize": "^6.28.0",
|
|
19
19
|
"socks": "^2.7.1",
|