@strapi/database 5.55.1 → 5.57.0
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/dialects/dialect.d.ts +28 -0
- package/dist/dialects/dialect.d.ts.map +1 -1
- package/dist/dialects/dialect.js +29 -0
- package/dist/dialects/dialect.js.map +1 -1
- package/dist/dialects/dialect.mjs +29 -0
- package/dist/dialects/dialect.mjs.map +1 -1
- package/dist/dialects/mysql/index.d.ts +9 -0
- package/dist/dialects/mysql/index.d.ts.map +1 -1
- package/dist/dialects/mysql/index.js +37 -0
- package/dist/dialects/mysql/index.js.map +1 -1
- package/dist/dialects/mysql/index.mjs +37 -0
- package/dist/dialects/mysql/index.mjs.map +1 -1
- package/dist/dialects/postgresql/index.d.ts +7 -0
- package/dist/dialects/postgresql/index.d.ts.map +1 -1
- package/dist/dialects/postgresql/index.js +50 -0
- package/dist/dialects/postgresql/index.js.map +1 -1
- package/dist/dialects/postgresql/index.mjs +50 -0
- package/dist/dialects/postgresql/index.mjs.map +1 -1
- package/dist/dialects/sqlite/index.d.ts +9 -0
- package/dist/dialects/sqlite/index.d.ts.map +1 -1
- package/dist/dialects/sqlite/index.js +16 -0
- package/dist/dialects/sqlite/index.js.map +1 -1
- package/dist/dialects/sqlite/index.mjs +16 -0
- package/dist/dialects/sqlite/index.mjs.map +1 -1
- package/dist/entity-manager/entity-repository.js +1 -1
- package/dist/entity-manager/entity-repository.js.map +1 -1
- package/dist/entity-manager/entity-repository.mjs +1 -1
- package/dist/entity-manager/entity-repository.mjs.map +1 -1
- package/dist/entity-manager/index.d.ts.map +1 -1
- package/dist/entity-manager/index.js +38 -36
- package/dist/entity-manager/index.js.map +1 -1
- package/dist/entity-manager/index.mjs +38 -36
- package/dist/entity-manager/index.mjs.map +1 -1
- package/dist/entity-manager/morph-relations.d.ts.map +1 -1
- package/dist/entity-manager/morph-relations.js +3 -5
- package/dist/entity-manager/morph-relations.js.map +1 -1
- package/dist/entity-manager/morph-relations.mjs +3 -5
- package/dist/entity-manager/morph-relations.mjs.map +1 -1
- package/dist/entity-manager/regular-relations.js +3 -3
- package/dist/entity-manager/regular-relations.js.map +1 -1
- package/dist/entity-manager/regular-relations.mjs +3 -3
- package/dist/entity-manager/regular-relations.mjs.map +1 -1
- package/dist/entity-manager/relations-orderer.d.ts.map +1 -1
- package/dist/entity-manager/relations-orderer.js +4 -5
- package/dist/entity-manager/relations-orderer.js.map +1 -1
- package/dist/entity-manager/relations-orderer.mjs +2 -3
- package/dist/entity-manager/relations-orderer.mjs.map +1 -1
- package/dist/fields/biginteger.js +1 -1
- package/dist/fields/biginteger.js.map +1 -1
- package/dist/fields/biginteger.mjs +1 -1
- package/dist/fields/biginteger.mjs.map +1 -1
- package/dist/fields/boolean.js +1 -1
- package/dist/fields/boolean.js.map +1 -1
- package/dist/fields/boolean.mjs +1 -1
- package/dist/fields/boolean.mjs.map +1 -1
- package/dist/fields/number.js +1 -1
- package/dist/fields/number.js.map +1 -1
- package/dist/fields/number.mjs +1 -1
- package/dist/fields/number.mjs.map +1 -1
- package/dist/fields/shared/parsers.js +2 -2
- package/dist/fields/shared/parsers.js.map +1 -1
- package/dist/fields/shared/parsers.mjs +2 -2
- package/dist/fields/shared/parsers.mjs.map +1 -1
- package/dist/fields/string.js +1 -1
- package/dist/fields/string.js.map +1 -1
- package/dist/fields/string.mjs +1 -1
- package/dist/fields/string.mjs.map +1 -1
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/dist/metadata/attribute-naming.d.ts +31 -0
- package/dist/metadata/attribute-naming.d.ts.map +1 -0
- package/dist/metadata/attribute-naming.js +39 -0
- package/dist/metadata/attribute-naming.js.map +1 -0
- package/dist/metadata/attribute-naming.mjs +37 -0
- package/dist/metadata/attribute-naming.mjs.map +1 -0
- package/dist/metadata/index.d.ts +5 -2
- package/dist/metadata/index.d.ts.map +1 -1
- package/dist/metadata/index.js +3 -0
- package/dist/metadata/index.js.map +1 -1
- package/dist/metadata/index.mjs +3 -1
- package/dist/metadata/index.mjs.map +1 -1
- package/dist/metadata/metadata.d.ts +10 -0
- package/dist/metadata/metadata.d.ts.map +1 -1
- package/dist/metadata/metadata.js +10 -2
- package/dist/metadata/metadata.js.map +1 -1
- package/dist/metadata/metadata.mjs +10 -2
- package/dist/metadata/metadata.mjs.map +1 -1
- package/dist/metadata/relations.d.ts.map +1 -1
- package/dist/metadata/relations.js +6 -5
- package/dist/metadata/relations.js.map +1 -1
- package/dist/metadata/relations.mjs +6 -5
- package/dist/metadata/relations.mjs.map +1 -1
- package/dist/migrations/common.d.ts +2 -0
- package/dist/migrations/common.d.ts.map +1 -1
- package/dist/migrations/common.js.map +1 -1
- package/dist/migrations/common.mjs.map +1 -1
- package/dist/migrations/file-builder.d.ts +97 -0
- package/dist/migrations/file-builder.d.ts.map +1 -0
- package/dist/migrations/file-builder.js +251 -0
- package/dist/migrations/file-builder.js.map +1 -0
- package/dist/migrations/file-builder.mjs +240 -0
- package/dist/migrations/file-builder.mjs.map +1 -0
- package/dist/migrations/index.d.ts +3 -2
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +6 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/index.mjs +6 -0
- package/dist/migrations/index.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -1
- package/dist/migrations/resolver.d.ts.map +1 -1
- package/dist/migrations/resolver.js +4 -1
- package/dist/migrations/resolver.js.map +1 -1
- package/dist/migrations/resolver.mjs +4 -1
- package/dist/migrations/resolver.mjs.map +1 -1
- package/dist/query/helpers/order-by.d.ts.map +1 -1
- package/dist/query/helpers/order-by.js +3 -4
- package/dist/query/helpers/order-by.js.map +1 -1
- package/dist/query/helpers/order-by.mjs +3 -4
- package/dist/query/helpers/order-by.mjs.map +1 -1
- package/dist/query/helpers/populate/apply.d.ts.map +1 -1
- package/dist/query/helpers/populate/apply.js +46 -30
- package/dist/query/helpers/populate/apply.js.map +1 -1
- package/dist/query/helpers/populate/apply.mjs +46 -30
- package/dist/query/helpers/populate/apply.mjs.map +1 -1
- package/dist/query/helpers/populate/process.js +3 -3
- package/dist/query/helpers/populate/process.js.map +1 -1
- package/dist/query/helpers/populate/process.mjs +3 -3
- package/dist/query/helpers/populate/process.mjs.map +1 -1
- package/dist/query/helpers/search.js +2 -2
- package/dist/query/helpers/search.js.map +1 -1
- package/dist/query/helpers/search.mjs +2 -2
- package/dist/query/helpers/search.mjs.map +1 -1
- package/dist/query/helpers/streams/readable.js +3 -3
- package/dist/query/helpers/streams/readable.js.map +1 -1
- package/dist/query/helpers/streams/readable.mjs +3 -3
- package/dist/query/helpers/streams/readable.mjs.map +1 -1
- package/dist/query/helpers/transform.d.ts.map +1 -1
- package/dist/query/helpers/transform.js +6 -13
- package/dist/query/helpers/transform.js.map +1 -1
- package/dist/query/helpers/transform.mjs +6 -9
- package/dist/query/helpers/transform.mjs.map +1 -1
- package/dist/query/helpers/where.js +13 -9
- package/dist/query/helpers/where.js.map +1 -1
- package/dist/query/helpers/where.mjs +13 -9
- package/dist/query/helpers/where.mjs.map +1 -1
- package/dist/query/query-builder.d.ts.map +1 -1
- package/dist/query/query-builder.js +35 -29
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/query-builder.mjs +35 -29
- package/dist/query/query-builder.mjs.map +1 -1
- package/dist/schema/builder.js +5 -5
- package/dist/schema/builder.js.map +1 -1
- package/dist/schema/builder.mjs +5 -5
- package/dist/schema/builder.mjs.map +1 -1
- package/dist/schema/diff.js +12 -12
- package/dist/schema/diff.js.map +1 -1
- package/dist/schema/diff.mjs +12 -12
- package/dist/schema/diff.mjs.map +1 -1
- package/dist/schema/index.d.ts +3 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +6 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/index.mjs +6 -0
- package/dist/schema/index.mjs.map +1 -1
- package/dist/schema/rename-helpers.d.ts +78 -0
- package/dist/schema/rename-helpers.d.ts.map +1 -0
- package/dist/schema/rename-helpers.js +235 -0
- package/dist/schema/rename-helpers.js.map +1 -0
- package/dist/schema/rename-helpers.mjs +233 -0
- package/dist/schema/rename-helpers.mjs.map +1 -0
- package/dist/utils/async-curry.d.ts.map +1 -1
- package/dist/utils/async-curry.js +1 -2
- package/dist/utils/async-curry.js.map +1 -1
- package/dist/utils/async-curry.mjs +1 -2
- package/dist/utils/async-curry.mjs.map +1 -1
- package/dist/utils/identifiers/hash.d.ts.map +1 -1
- package/dist/utils/identifiers/hash.js +1 -2
- package/dist/utils/identifiers/hash.js.map +1 -1
- package/dist/utils/identifiers/hash.mjs +1 -2
- package/dist/utils/identifiers/hash.mjs.map +1 -1
- package/dist/utils/identifiers/index.js +8 -10
- package/dist/utils/identifiers/index.js.map +1 -1
- package/dist/utils/identifiers/index.mjs +8 -6
- package/dist/utils/identifiers/index.mjs.map +1 -1
- package/dist/validations/relations/bidirectional.js +1 -1
- package/dist/validations/relations/bidirectional.js.map +1 -1
- package/dist/validations/relations/bidirectional.mjs +1 -1
- package/dist/validations/relations/bidirectional.mjs.map +1 -1
- package/package.json +6 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pick, has, isEmpty, compact, differenceWith, uniqBy, difference, map, isPlainObject, isString, isNumber, castArray, isObject, uniqWith, isEqual } from 'lodash';
|
|
2
2
|
import { isScalarAttribute, isRelationalAttribute } from '../utils/types.mjs';
|
|
3
3
|
import { createField } from '../fields/index.mjs';
|
|
4
4
|
import createQueryBuilder from '../query/query-builder.mjs';
|
|
@@ -30,7 +30,7 @@ import { relationsOrderer } from './relations-orderer.mjs';
|
|
|
30
30
|
await qb.execute();
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
const isRecord = (value)=>isObject(value) &&
|
|
33
|
+
const isRecord = (value)=>isObject(value) && value != null;
|
|
34
34
|
const toId = (value)=>{
|
|
35
35
|
if (isRecord(value) && 'id' in value && isValidId(value.id)) {
|
|
36
36
|
return value.id;
|
|
@@ -41,10 +41,10 @@ const toId = (value)=>{
|
|
|
41
41
|
throw new Error(`Invalid id, expected a string or integer, got ${JSON.stringify(value)}`);
|
|
42
42
|
};
|
|
43
43
|
const toIds = (value)=>castArray(value || []).map(toId);
|
|
44
|
-
const isValidId = (value)=>isString(value) || isInteger(value);
|
|
44
|
+
const isValidId = (value)=>isString(value) || Number.isInteger(value);
|
|
45
45
|
const isValidObjectId = (value)=>isRecord(value) && 'id' in value && isValidId(value.id);
|
|
46
46
|
const toIdArray = (data)=>{
|
|
47
|
-
const array = castArray(data).filter((datum)
|
|
47
|
+
const array = castArray(data).filter((datum)=>datum != null).map((datum)=>{
|
|
48
48
|
// if it is a string or an integer return an obj with id = to datum
|
|
49
49
|
if (isValidId(datum)) {
|
|
50
50
|
return {
|
|
@@ -58,17 +58,17 @@ const toIdArray = (data)=>{
|
|
|
58
58
|
}
|
|
59
59
|
return datum;
|
|
60
60
|
});
|
|
61
|
-
return uniqWith(
|
|
61
|
+
return uniqWith(array, isEqual);
|
|
62
62
|
};
|
|
63
63
|
const toAssocs = (data)=>{
|
|
64
|
-
if (isArray(data) || isString(data) || isNumber(data) ||
|
|
64
|
+
if (Array.isArray(data) || isString(data) || isNumber(data) || data === null || isRecord(data) && 'id' in data) {
|
|
65
65
|
return {
|
|
66
|
-
set:
|
|
66
|
+
set: data === null ? data : toIdArray(data)
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
69
|
if (data?.set) {
|
|
70
70
|
return {
|
|
71
|
-
set:
|
|
71
|
+
set: data.set === null ? data.set : toIdArray(data.set)
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
74
|
return {
|
|
@@ -93,8 +93,8 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
|
|
|
93
93
|
const attribute = attributes[attributeName];
|
|
94
94
|
if (isScalarAttribute(attribute)) {
|
|
95
95
|
const field = createField(attribute);
|
|
96
|
-
if (
|
|
97
|
-
if (
|
|
96
|
+
if (data[attributeName] === undefined) {
|
|
97
|
+
if (attribute.default !== undefined && withDefaults) {
|
|
98
98
|
if (typeof attribute.default === 'function') {
|
|
99
99
|
obj[attributeName] = attribute.default();
|
|
100
100
|
} else {
|
|
@@ -114,7 +114,7 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
|
|
|
114
114
|
if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {
|
|
115
115
|
const joinColumnName = attribute.joinColumn.name;
|
|
116
116
|
// allow setting to null
|
|
117
|
-
let attrValue =
|
|
117
|
+
let attrValue = data[attributeName] !== undefined ? data[attributeName] : data[joinColumnName];
|
|
118
118
|
// Legacy single-column storage: only one id fits. Take the last
|
|
119
119
|
// and warn — modern schemas use a join table that can hold both
|
|
120
120
|
// the draft and published rows of the related entry.
|
|
@@ -125,9 +125,9 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
|
|
|
125
125
|
}
|
|
126
126
|
attrValue = setIds.length > 0 ? setIds[setIds.length - 1] : null;
|
|
127
127
|
}
|
|
128
|
-
if (
|
|
128
|
+
if (attrValue === null) {
|
|
129
129
|
obj[joinColumnName] = attrValue;
|
|
130
|
-
} else if (
|
|
130
|
+
} else if (attrValue !== undefined) {
|
|
131
131
|
obj[joinColumnName] = toId(attrValue);
|
|
132
132
|
}
|
|
133
133
|
continue;
|
|
@@ -142,8 +142,8 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
|
|
|
142
142
|
});
|
|
143
143
|
continue;
|
|
144
144
|
}
|
|
145
|
-
if (
|
|
146
|
-
if (!has('id'
|
|
145
|
+
if (value !== undefined) {
|
|
146
|
+
if (!has(value, 'id') || !has(value, typeField)) {
|
|
147
147
|
throw new Error(`Expects properties ${typeField} an id to make a morph association`);
|
|
148
148
|
}
|
|
149
149
|
Object.assign(obj, {
|
|
@@ -186,11 +186,11 @@ const createEntityManager = (db)=>{
|
|
|
186
186
|
const states = await db.lifecycles.run('beforeCount', uid, {
|
|
187
187
|
params
|
|
188
188
|
});
|
|
189
|
-
const res = await this.createQueryBuilder(uid).init(pick([
|
|
189
|
+
const res = await this.createQueryBuilder(uid).init(pick(params, [
|
|
190
190
|
'_q',
|
|
191
191
|
'where',
|
|
192
192
|
'filters'
|
|
193
|
-
]
|
|
193
|
+
])).count().first().execute();
|
|
194
194
|
const result = Number(res.count);
|
|
195
195
|
await db.lifecycles.run('afterCount', uid, {
|
|
196
196
|
params,
|
|
@@ -248,7 +248,7 @@ const createEntityManager = (db)=>{
|
|
|
248
248
|
});
|
|
249
249
|
const metadata = db.metadata.get(uid);
|
|
250
250
|
const { data } = params;
|
|
251
|
-
if (!isArray(data)) {
|
|
251
|
+
if (!Array.isArray(data)) {
|
|
252
252
|
throw new Error('CreateMany expects data to be an array');
|
|
253
253
|
}
|
|
254
254
|
const dataToInsert = data.map((datum)=>processData(metadata, datum, {
|
|
@@ -348,11 +348,11 @@ const createEntityManager = (db)=>{
|
|
|
348
348
|
throw new Error('Update requires data');
|
|
349
349
|
}
|
|
350
350
|
// Same pick set as count and deleteMany. See deleteMany for why.
|
|
351
|
-
const updatedRows = await this.createQueryBuilder(uid).init(pick([
|
|
351
|
+
const updatedRows = await this.createQueryBuilder(uid).init(pick(params, [
|
|
352
352
|
'_q',
|
|
353
353
|
'where',
|
|
354
354
|
'filters'
|
|
355
|
-
]
|
|
355
|
+
])).update(dataToUpdate).execute({
|
|
356
356
|
mapResults: false
|
|
357
357
|
});
|
|
358
358
|
const result = {
|
|
@@ -411,11 +411,11 @@ const createEntityManager = (db)=>{
|
|
|
411
411
|
// Only apply filter criteria (_q / where / filters), same as count — not full findMany params.
|
|
412
412
|
// limit, offset, orderBy, populate, etc. must be ignored: populate throws on delete results,
|
|
413
413
|
// and pagination keys can make deleteMany diverge from findMany or delete an unexpected slice.
|
|
414
|
-
const deletedRows = await this.createQueryBuilder(uid).init(pick([
|
|
414
|
+
const deletedRows = await this.createQueryBuilder(uid).init(pick(params, [
|
|
415
415
|
'_q',
|
|
416
416
|
'where',
|
|
417
417
|
'filters'
|
|
418
|
-
]
|
|
418
|
+
])).delete().execute({
|
|
419
419
|
mapResults: false
|
|
420
420
|
});
|
|
421
421
|
const result = {
|
|
@@ -434,7 +434,7 @@ const createEntityManager = (db)=>{
|
|
|
434
434
|
const { transaction: trx } = options ?? {};
|
|
435
435
|
for (const attributeName of Object.keys(attributes)){
|
|
436
436
|
const attribute = attributes[attributeName];
|
|
437
|
-
const isValidLink = has(
|
|
437
|
+
const isValidLink = has(data, attributeName) && data[attributeName] != null;
|
|
438
438
|
if (attribute.type !== 'relation' || !isValidLink) {
|
|
439
439
|
continue;
|
|
440
440
|
}
|
|
@@ -574,7 +574,7 @@ const createEntityManager = (db)=>{
|
|
|
574
574
|
});
|
|
575
575
|
}
|
|
576
576
|
// prepare new relations to insert
|
|
577
|
-
const insert = uniqBy('id'
|
|
577
|
+
const insert = uniqBy(relsToAdd, 'id').map((data)=>{
|
|
578
578
|
return {
|
|
579
579
|
[joinColumn.name]: id,
|
|
580
580
|
[inverseJoinColumn.name]: data.id,
|
|
@@ -627,7 +627,7 @@ const createEntityManager = (db)=>{
|
|
|
627
627
|
const { transaction: trx } = options ?? {};
|
|
628
628
|
for (const attributeName of Object.keys(attributes)){
|
|
629
629
|
const attribute = attributes[attributeName];
|
|
630
|
-
if (attribute.type !== 'relation' || !has(
|
|
630
|
+
if (attribute.type !== 'relation' || !has(data, attributeName)) {
|
|
631
631
|
continue;
|
|
632
632
|
}
|
|
633
633
|
const cleanRelationData = toAssocs(data[attributeName]);
|
|
@@ -646,7 +646,7 @@ const createEntityManager = (db)=>{
|
|
|
646
646
|
[idColumn.name]: id,
|
|
647
647
|
[typeColumn.name]: uid
|
|
648
648
|
}).transacting(trx).execute();
|
|
649
|
-
if (
|
|
649
|
+
if (cleanRelationData.set !== null) {
|
|
650
650
|
const relId = toIds(cleanRelationData.set?.[0]);
|
|
651
651
|
await this.createQueryBuilder(target).update({
|
|
652
652
|
[idColumn.name]: id,
|
|
@@ -876,7 +876,7 @@ const createEntityManager = (db)=>{
|
|
|
876
876
|
}).update({
|
|
877
877
|
[attribute.joinColumn.referencedColumn]: null
|
|
878
878
|
}).transacting(trx).execute();
|
|
879
|
-
if (
|
|
879
|
+
if (cleanRelationData.set !== null) {
|
|
880
880
|
const relIdsToAdd = toIds(cleanRelationData.set);
|
|
881
881
|
await this.createQueryBuilder(target).where({
|
|
882
882
|
id: relIdsToAdd
|
|
@@ -899,7 +899,7 @@ const createEntityManager = (db)=>{
|
|
|
899
899
|
select.push(inverseOrderColumnName);
|
|
900
900
|
}
|
|
901
901
|
// only delete relations
|
|
902
|
-
if (
|
|
902
|
+
if (cleanRelationData.set === null) {
|
|
903
903
|
await deleteRelations({
|
|
904
904
|
id,
|
|
905
905
|
attribute,
|
|
@@ -908,7 +908,7 @@ const createEntityManager = (db)=>{
|
|
|
908
908
|
transaction: trx
|
|
909
909
|
});
|
|
910
910
|
} else {
|
|
911
|
-
const isPartialUpdate = !has('set'
|
|
911
|
+
const isPartialUpdate = !has(cleanRelationData, 'set');
|
|
912
912
|
let relIdsToaddOrMove;
|
|
913
913
|
if (isPartialUpdate) {
|
|
914
914
|
if (isAnyToOne(attribute)) ;
|
|
@@ -916,7 +916,7 @@ const createEntityManager = (db)=>{
|
|
|
916
916
|
// Use id-only comparison so a disconnect item whose id also appears in
|
|
917
917
|
// the connect array is correctly excluded from deletion (deep-equality
|
|
918
918
|
// fails because connect items carry extra fields like `position`).
|
|
919
|
-
const relIdsToDelete = toIds(differenceWith((a, b)=>a.id === b.id
|
|
919
|
+
const relIdsToDelete = toIds(differenceWith(cleanRelationData.disconnect, cleanRelationData.connect ?? [], (a, b)=>a.id === b.id));
|
|
920
920
|
// When a connect item's position.before/after references an id that is
|
|
921
921
|
// about to be deleted (relIdsToDelete), the referenced row won't exist by
|
|
922
922
|
// the time the adjacentRelations query runs below, causing sortConnectArray
|
|
@@ -1056,7 +1056,7 @@ const createEntityManager = (db)=>{
|
|
|
1056
1056
|
}).where(joinTable.on || {}).transacting(trx).execute();
|
|
1057
1057
|
}
|
|
1058
1058
|
// prepare relations to insert
|
|
1059
|
-
const insert = uniqBy('id'
|
|
1059
|
+
const insert = uniqBy(cleanRelationData.connect, 'id').map((relToAdd)=>({
|
|
1060
1060
|
[joinColumn.name]: id,
|
|
1061
1061
|
[inverseJoinColumn.name]: relToAdd.id,
|
|
1062
1062
|
...joinTable.on,
|
|
@@ -1093,7 +1093,7 @@ const createEntityManager = (db)=>{
|
|
|
1093
1093
|
}
|
|
1094
1094
|
// add inv order value
|
|
1095
1095
|
if (hasInverseOrderColumn(attribute)) {
|
|
1096
|
-
const nonExistingRelsIds = difference(relIdsToaddOrMove, map(inverseJoinColumn.name
|
|
1096
|
+
const nonExistingRelsIds = difference(relIdsToaddOrMove, map(currentMovingRels, inverseJoinColumn.name));
|
|
1097
1097
|
const maxResults = await db.getConnection().select(inverseJoinColumn.name).max(inverseOrderColumnName, {
|
|
1098
1098
|
as: 'max'
|
|
1099
1099
|
}).whereIn(inverseJoinColumn.name, nonExistingRelsIds).where(joinTable.on || {}).groupBy(inverseJoinColumn.name).from(joinTable.name).transacting(trx);
|
|
@@ -1138,7 +1138,7 @@ const createEntityManager = (db)=>{
|
|
|
1138
1138
|
if (isEmpty(cleanRelationData.set)) {
|
|
1139
1139
|
continue;
|
|
1140
1140
|
}
|
|
1141
|
-
const insert = uniqBy('id'
|
|
1141
|
+
const insert = uniqBy(cleanRelationData.set, 'id').map((relToAdd)=>({
|
|
1142
1142
|
[joinColumn.name]: id,
|
|
1143
1143
|
[inverseJoinColumn.name]: relToAdd.id,
|
|
1144
1144
|
...joinTable.on,
|
|
@@ -1158,7 +1158,7 @@ const createEntityManager = (db)=>{
|
|
|
1158
1158
|
$in: relIdsToaddOrMove
|
|
1159
1159
|
}
|
|
1160
1160
|
}).where(joinTable.on || {}).transacting(trx).execute();
|
|
1161
|
-
const inverseRelsIds = map(inverseJoinColumn.name
|
|
1161
|
+
const inverseRelsIds = map(existingRels, inverseJoinColumn.name);
|
|
1162
1162
|
const nonExistingRelsIds = difference(relIdsToaddOrMove, inverseRelsIds);
|
|
1163
1163
|
const maxResults = await db.getConnection().select(inverseJoinColumn.name).max(inverseOrderColumnName, {
|
|
1164
1164
|
as: 'max'
|
|
@@ -1315,7 +1315,9 @@ const createEntityManager = (db)=>{
|
|
|
1315
1315
|
// TODO: add lifecycle events
|
|
1316
1316
|
async load (uid, entity, fields, populate) {
|
|
1317
1317
|
const { attributes } = db.metadata.get(uid);
|
|
1318
|
-
const fieldsArr =
|
|
1318
|
+
const fieldsArr = Array.isArray(fields) ? fields : [
|
|
1319
|
+
fields
|
|
1320
|
+
];
|
|
1319
1321
|
fieldsArr.forEach((field)=>{
|
|
1320
1322
|
const attribute = attributes[field];
|
|
1321
1323
|
if (!attribute || attribute.type !== 'relation') {
|
|
@@ -1338,7 +1340,7 @@ const createEntityManager = (db)=>{
|
|
|
1338
1340
|
return null;
|
|
1339
1341
|
}
|
|
1340
1342
|
if (Array.isArray(fields)) {
|
|
1341
|
-
return pick(
|
|
1343
|
+
return pick(entry, fields);
|
|
1342
1344
|
}
|
|
1343
1345
|
return entry[fields];
|
|
1344
1346
|
},
|