@forestadmin/datasource-sql 1.2.2 → 1.2.4
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.
|
@@ -36,10 +36,15 @@ class SqlTypeConverter {
|
|
|
36
36
|
*/
|
|
37
37
|
async getArrayType(tableName, columnName) {
|
|
38
38
|
// Get the type of the elements in the array from the database
|
|
39
|
-
const [{ udtName, dataType, charLength, rawEnumValues }] = await this.sequelize.query(`SELECT
|
|
39
|
+
const [{ udtName, dataType, charLength, schema, rawEnumValues }] = await this.sequelize.query(`SELECT
|
|
40
40
|
e.udt_name AS "udtName",
|
|
41
41
|
e.data_type AS "dataType",
|
|
42
42
|
e.character_maximum_length as "charLength",
|
|
43
|
+
(
|
|
44
|
+
SELECT ns.nspname
|
|
45
|
+
FROM pg_catalog.pg_namespace ns JOIN pg_catalog.pg_type t ON ns.oid = t.typnamespace
|
|
46
|
+
WHERE t.typname = e.udt_name
|
|
47
|
+
) as "schema",
|
|
43
48
|
(
|
|
44
49
|
SELECT array_agg(en.enumlabel)
|
|
45
50
|
FROM pg_catalog.pg_type t JOIN pg_catalog.pg_enum en ON t.oid = en.enumtypid
|
|
@@ -59,7 +64,7 @@ class SqlTypeConverter {
|
|
|
59
64
|
const queryInterface = this.sequelize.getQueryInterface();
|
|
60
65
|
const queryGen = queryInterface.queryGenerator;
|
|
61
66
|
const enumValues = queryGen.fromArray(rawEnumValues);
|
|
62
|
-
subType = { type: 'enum', name: udtName, values: enumValues };
|
|
67
|
+
subType = { type: 'enum', schema, name: udtName, values: enumValues };
|
|
63
68
|
}
|
|
64
69
|
else {
|
|
65
70
|
const dataTypeWithLength = charLength ? `${dataType}(${charLength})` : dataType;
|
|
@@ -132,4 +137,4 @@ class SqlTypeConverter {
|
|
|
132
137
|
}
|
|
133
138
|
exports.default = SqlTypeConverter;
|
|
134
139
|
SqlTypeConverter.enumRegex = /ENUM\((.*)\)/i;
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLXR5cGUtY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludHJvc3BlY3Rpb24vaGVscGVycy9zcWwtdHlwZS1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBcUU7QUFJckUsTUFBcUIsZ0JBQWdCO0lBSW5DLFlBQVksU0FBb0I7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQ1gsU0FBaUIsRUFDakIsVUFBa0IsRUFDbEIsVUFBNkI7UUFFN0IsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLEtBQUssT0FBTztnQkFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRWxELEtBQUssY0FBYyxDQUFDO1lBQ3BCLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztnQkFDOUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXRDO2dCQUNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQzNFO0lBQ0gsQ0FBQztJQUVELGdFQUFnRTtJQUN4RCxXQUFXLENBQUMsVUFBNkI7UUFDL0MsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtZQUN0QyxnQkFBZ0I7WUFDaEIsT0FBTyxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDO2dCQUNwQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUM5QyxDQUFDLENBQUMsMERBQTBEO29C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
|
|
@@ -13,13 +13,14 @@ export type ColumnType = {
|
|
|
13
13
|
} | {
|
|
14
14
|
type: 'enum';
|
|
15
15
|
/**
|
|
16
|
-
* When using postgres, name of the type of this enum (e.g. "enum_users_role")
|
|
16
|
+
* When using postgres, schema and name of the type of this enum (e.g. "enum_users_role")
|
|
17
17
|
*
|
|
18
18
|
* This is needed when the enum is used in an array, because sequelize needs to cast when
|
|
19
19
|
* inserting into that column.
|
|
20
20
|
* As this is not needed for enums which are not used in arrays, and requires extra
|
|
21
21
|
* introspection queries, it is filled only when needed.
|
|
22
22
|
*/
|
|
23
|
+
schema?: string;
|
|
23
24
|
name?: string;
|
|
24
25
|
/** list of values that the enum can take */
|
|
25
26
|
values: string[];
|
|
@@ -15,7 +15,7 @@ class SequelizeTypeFactory {
|
|
|
15
15
|
// This should prevent side-effects on most cases if the custom type fails to mimic the
|
|
16
16
|
// default one and cause issues, while still allowing to use custom types when required.
|
|
17
17
|
return dialect === 'postgres' && type.name && type.name !== `enum_${table}_${columnName}`
|
|
18
|
-
? this.makeCustomEnumType(type.name, type.values)
|
|
18
|
+
? this.makeCustomEnumType(type.schema, type.name, type.values)
|
|
19
19
|
: sequelize_1.DataTypes.ENUM(...type.values);
|
|
20
20
|
case 'array':
|
|
21
21
|
return sequelize_1.DataTypes.ARRAY(this.makeType(dialect, type.subType, table, columnName));
|
|
@@ -34,13 +34,14 @@ class SequelizeTypeFactory {
|
|
|
34
34
|
* @see https://github.com/sequelize/sequelize/blob/v6.28.0/src/dialects/postgres/data-types.js#L491
|
|
35
35
|
* @see https://github.com/sequelize/sequelize/blob/v6.28.0/src/utils.js#L555
|
|
36
36
|
*/
|
|
37
|
-
static makeCustomEnumType(name, values) {
|
|
37
|
+
static makeCustomEnumType(schema, name, values) {
|
|
38
38
|
var _a;
|
|
39
|
+
const key = `${schema ? `"${schema}".` : ''}"${name}"`;
|
|
39
40
|
const Type = (_a = class extends sequelize_1.DataTypes.ABSTRACT {
|
|
40
41
|
constructor() {
|
|
41
42
|
super();
|
|
42
43
|
this.isDataSourceSqlEnum = true;
|
|
43
|
-
this.key =
|
|
44
|
+
this.key = key;
|
|
44
45
|
// Steal the validate method from the ENUM type
|
|
45
46
|
this.validate = sequelize_1.DataTypes.ENUM.prototype.validate;
|
|
46
47
|
this.values = values;
|
|
@@ -54,10 +55,10 @@ class SequelizeTypeFactory {
|
|
|
54
55
|
// Setting this tells sequelize the name of the type in the database.
|
|
55
56
|
// This is used, most notably, when casting values (which happens when the enum is used in
|
|
56
57
|
// arrays)
|
|
57
|
-
_a.key =
|
|
58
|
+
_a.key = key,
|
|
58
59
|
_a);
|
|
59
60
|
return new Type();
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
exports.default = SequelizeTypeFactory;
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVsaXplLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3JtLWJ1aWxkZXIvaGVscGVycy9zZXF1ZWxpemUtdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRCQUE0QjtBQUM1Qix5Q0FBeUM7QUFDekMseUNBQXNDO0FBSXRDLE1BQXFCLG9CQUFvQjtJQUN2QyxNQUFNLENBQUMsUUFBUSxDQUNiLE9BQWUsRUFDZixJQUFnQixFQUNoQixLQUFhLEVBQ2IsVUFBa0I7UUFFbEIsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLEtBQUssUUFBUTtnQkFDWCxJQUFJLHFCQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztvQkFBRSxPQUFPLHFCQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUV0RCxLQUFLLE1BQU07Z0JBQ1QsNkRBQTZEO2dCQUM3RCx1RkFBdUY7Z0JBQ3ZGLHdGQUF3RjtnQkFDeEYsT0FBTyxPQUFPLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxVQUFVLEVBQUU7b0JBQ3ZGLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQzlELENBQUMsQ0FBQyxxQkFBUyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVyQyxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxxQkFBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBRWxGO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDL0IsTUFBYyxFQUNkLElBQVksRUFDWixNQUFnQjs7UUFFaEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQztRQUV2RCxNQUFNLElBQUksU0FBRyxLQUFNLFNBQVEscUJBQVMsQ0FBQyxRQUFRO2dCQWtCM0M7b0JBQ0UsS0FBSyxFQUFFLENBQUM7b0JBZEQsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO29CQU0zQixRQUFHLEdBQUcsR0FBRyxDQUFDO29CQWNuQiwrQ0FBK0M7b0JBQy9DLGFBQVEsR0FBRyxxQkFBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO29CQUwzQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUM1QixDQUFDO2FBSUY7WUExQkMscUZBQXFGO1lBQ3JGLDREQUE0RDtZQUM1RCxzREFBc0Q7WUFDdEMsc0JBQW1CLEdBQUcsSUFBSztZQUczQyxxRUFBcUU7WUFDckUsMEZBQTBGO1lBQzFGLFVBQVU7WUFDTSxNQUFHLEdBQUcsR0FBSTtlQWlCM0IsQ0FBQztRQUVGLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUE3RUQsdUNBNkVDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/datasource-sql",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
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.2.
|
|
16
|
-
"@forestadmin/datasource-toolkit": "1.
|
|
15
|
+
"@forestadmin/datasource-sequelize": "1.2.12",
|
|
16
|
+
"@forestadmin/datasource-toolkit": "1.4.0",
|
|
17
17
|
"pluralize": "^8.0.0",
|
|
18
18
|
"sequelize": "^6.28.0"
|
|
19
19
|
},
|