@forestadmin/datasource-sequelize 1.2.7 → 1.2.8
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/collection.js +4 -2
- package/dist/utils/aggregation.d.ts +1 -1
- package/dist/utils/aggregation.js +14 -12
- package/package.json +1 -1
package/dist/collection.js
CHANGED
|
@@ -65,11 +65,13 @@ class SequelizeCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
65
65
|
}
|
|
66
66
|
async aggregate(caller, filter, aggregation, limit) {
|
|
67
67
|
let aggregationField = aggregation.field;
|
|
68
|
+
let aggregationFieldSchema;
|
|
68
69
|
if (aggregation.operation === 'Count' || !aggregationField) {
|
|
69
70
|
aggregationField = '*';
|
|
70
71
|
}
|
|
71
72
|
else {
|
|
72
73
|
aggregationField = this.aggregationUtils.quoteField(aggregationField);
|
|
74
|
+
aggregationFieldSchema = datasource_toolkit_1.CollectionUtils.getFieldSchema(this, aggregation.field);
|
|
73
75
|
}
|
|
74
76
|
const aggregationFunction = this.fn(aggregation.operation.toUpperCase(), this.col(aggregationField));
|
|
75
77
|
const aggregationAttribute = [
|
|
@@ -93,8 +95,8 @@ class SequelizeCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
93
95
|
raw: true,
|
|
94
96
|
};
|
|
95
97
|
const rows = await this.model.findAll(query);
|
|
96
|
-
return this.aggregationUtils.computeResult(rows, aggregation.groups);
|
|
98
|
+
return this.aggregationUtils.computeResult(rows, aggregation.groups, !aggregationFieldSchema || aggregationFieldSchema?.columnType === 'Number');
|
|
97
99
|
}
|
|
98
100
|
}
|
|
99
101
|
exports.default = SequelizeCollection;
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsd0VBYXlDO0FBR3pDLHNFQUFtRDtBQUNuRCwwRUFBaUQ7QUFDakQsd0hBQTBFO0FBQzFFLDhFQUFxRDtBQUNyRCxvRUFBNEM7QUFFNUMsTUFBcUIsbUJBQW9CLFNBQVEsbUNBQWM7SUFTN0QsWUFDRSxJQUFZLEVBQ1osVUFBc0I7SUFDdEIsOERBQThEO0lBQzlELEtBQTZCLEVBQzdCLE1BQWU7UUFFZixLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLHFCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUkseUJBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckQsTUFBTSxXQUFXLEdBQUcsOENBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENB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
|
|
@@ -15,6 +15,6 @@ export default class AggregationUtils {
|
|
|
15
15
|
attributes: ProjectionAlias[];
|
|
16
16
|
};
|
|
17
17
|
getOrder(aggregationFunction: Fn): [string | Fn | import("sequelize/types/utils").Col | import("sequelize/types/utils").Literal, string];
|
|
18
|
-
computeResult(rows: Model<
|
|
18
|
+
computeResult(rows: Model<unknown, unknown>[], groups: Aggregation['groups'], expectsNumber: boolean): AggregateResult[];
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=aggregation.d.ts.map
|
|
@@ -59,20 +59,22 @@ class AggregationUtils {
|
|
|
59
59
|
}
|
|
60
60
|
return order;
|
|
61
61
|
}
|
|
62
|
-
computeResult(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
computeResult(rows, groups, expectsNumber) {
|
|
63
|
+
return rows.map(row => {
|
|
64
|
+
let value = row[this.aggregateFieldName];
|
|
65
|
+
// Workaround Sequelize casting sums to strings.
|
|
66
|
+
// This happens since sequelize@6.27.0 because sequelize implemented support for bigints.
|
|
67
|
+
if (expectsNumber && typeof value === 'string' && !Number.isNaN(Number(value)))
|
|
68
|
+
value = Number(value);
|
|
69
|
+
return {
|
|
70
|
+
value,
|
|
71
|
+
group: (groups ?? []).reduce((memo, { field }) => {
|
|
72
|
+
memo[field] = serializer_1.default.serializeValue(row[this.getGroupFieldName(field)]);
|
|
73
|
+
return memo;
|
|
74
|
+
}, {}),
|
|
69
75
|
};
|
|
70
|
-
aggregationQueryGroup?.forEach(({ field }) => {
|
|
71
|
-
aggregateResult.group[field] = serializer_1.default.serializeValue(aggregate[this.getGroupFieldName(field)]);
|
|
72
|
-
});
|
|
73
|
-
return aggregateResult;
|
|
74
76
|
});
|
|
75
77
|
}
|
|
76
78
|
}
|
|
77
79
|
exports.default = AggregationUtils;
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYWdncmVnYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFBZ0c7QUFZaEcsOEZBQW9FO0FBQ3BFLDhEQUFzQztBQUN0QyxnRUFBNEM7QUFFNUMsTUFBcUIsZ0JBQWdCO0lBVW5DLDhEQUE4RDtJQUM5RCxZQUFZLEtBQTZCO1FBSGhDLHVCQUFrQixHQUFHLGVBQWUsQ0FBQztRQUk1QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBYSxDQUFDO1FBQzVELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBRXBDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLG9DQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFVBQWtCO1FBQzFDLE9BQU8sR0FBRyxVQUFVLGFBQWEsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSTtZQUNGLE1BQU0sU0FBUyxHQUFHLElBQUEscUJBQWUsRUFBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUzRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDN0U7UUFBQyxNQUFNO1lBQ04sTUFBTSxJQUFJLG9DQUFlLENBQ3ZCLG9CQUFvQixLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLG1CQUFtQixDQUNyRSxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lB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
|