@strapi/database 5.45.1 → 5.46.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/entity-manager/index.d.ts.map +1 -1
- package/dist/entity-manager/index.js +16 -4
- package/dist/entity-manager/index.js.map +1 -1
- package/dist/entity-manager/index.mjs +16 -4
- package/dist/entity-manager/index.mjs.map +1 -1
- package/dist/query/helpers/order-by.d.ts +15 -0
- package/dist/query/helpers/order-by.d.ts.map +1 -1
- package/dist/query/helpers/order-by.js +16 -0
- package/dist/query/helpers/order-by.js.map +1 -1
- package/dist/query/helpers/order-by.mjs +16 -1
- 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 +6 -4
- package/dist/query/helpers/populate/apply.js.map +1 -1
- package/dist/query/helpers/populate/apply.mjs +6 -4
- package/dist/query/helpers/populate/apply.mjs.map +1 -1
- package/dist/query/query-builder.d.ts +1 -0
- package/dist/query/query-builder.d.ts.map +1 -1
- package/dist/query/query-builder.js +47 -15
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/query-builder.mjs +48 -16
- package/dist/query/query-builder.mjs.map +1 -1
- package/dist/schema/storage.d.ts.map +1 -1
- package/dist/schema/storage.js +6 -1
- package/dist/schema/storage.js.map +1 -1
- package/dist/schema/storage.mjs +6 -1
- package/dist/schema/storage.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-manager/index.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAE5D,cAAc,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-manager/index.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAE5D,cAAc,SAAS,CAAC;AA4OxB,eAAO,MAAM,mBAAmB,OAAQ,QAAQ,KAAG,aAm1ClD,CAAC"}
|
|
@@ -116,7 +116,17 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
|
|
|
116
116
|
if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {
|
|
117
117
|
const joinColumnName = attribute.joinColumn.name;
|
|
118
118
|
// allow setting to null
|
|
119
|
-
|
|
119
|
+
let attrValue = !_.isUndefined(data[attributeName]) ? data[attributeName] : data[joinColumnName];
|
|
120
|
+
// Legacy single-column storage: only one id fits. Take the last
|
|
121
|
+
// and warn — modern schemas use a join table that can hold both
|
|
122
|
+
// the draft and published rows of the related entry.
|
|
123
|
+
if (_.isObject(attrValue) && !Array.isArray(attrValue) && 'set' in attrValue && Array.isArray(attrValue.set)) {
|
|
124
|
+
const setIds = attrValue.set;
|
|
125
|
+
if (setIds.length > 1) {
|
|
126
|
+
strapi?.log?.warn?.(`Multiple ids provided for xToOne relation "${attributeName}" stored in a single FK column; keeping only the last id. Consider using a join table (useJoinTable: true) to support multiple versions of a Draft-and-Publish target.`);
|
|
127
|
+
}
|
|
128
|
+
attrValue = setIds.length > 0 ? setIds[setIds.length - 1] : null;
|
|
129
|
+
}
|
|
120
130
|
if (_.isNull(attrValue)) {
|
|
121
131
|
obj[joinColumnName] = attrValue;
|
|
122
132
|
} else if (!_.isUndefined(attrValue)) {
|
|
@@ -968,9 +978,11 @@ const createEntityManager = (db)=>{
|
|
|
968
978
|
transaction: trx
|
|
969
979
|
});
|
|
970
980
|
} else {
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
981
|
+
// Keep every row. The payload was already collapsed to a
|
|
982
|
+
// single related entry upstream; what's left here may still
|
|
983
|
+
// be two rows for the same entry (its draft and published
|
|
984
|
+
// sides) and both need to be linked, otherwise the entry
|
|
985
|
+
// vanishes from the Edit View on save.
|
|
974
986
|
// overwrite all relations
|
|
975
987
|
relIdsToaddOrMove = toIds(cleanRelationData.set);
|
|
976
988
|
await regularRelations.deleteRelations({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/entity-manager/index.ts"],"sourcesContent":["import {\n castArray,\n compact,\n difference,\n differenceWith,\n has,\n isArray,\n isEmpty,\n isEqual,\n isInteger,\n isNil,\n isNull,\n isNumber,\n isObject,\n isPlainObject,\n isString,\n isUndefined,\n map,\n pick,\n uniqBy,\n uniqWith,\n} from 'lodash/fp';\n\nimport * as types from '../utils/types';\nimport { createField } from '../fields';\nimport { createQueryBuilder } from '../query';\nimport { createRepository } from './entity-repository';\nimport {\n deleteRelatedMorphOneRelationsAfterMorphToManyUpdate,\n encodePolymorphicRelation,\n encodePolymorphicId,\n} from './morph-relations';\nimport {\n isBidirectional,\n isAnyToOne,\n isOneToAny,\n hasOrderColumn,\n hasInverseOrderColumn,\n} from '../metadata';\nimport {\n deletePreviousOneToAnyRelations,\n deletePreviousAnyToOneRelations,\n deleteRelations,\n cleanOrderColumns,\n} from './regular-relations';\nimport { relationsOrderer } from './relations-orderer';\nimport type { Database } from '..';\nimport type { Meta } from '../metadata';\nimport type { ID } from '../types';\nimport { EntityManager, Repository, Entity } from './types';\n\nexport * from './types';\n\n/**\n * Batched join-table insert for SQLite etc. (GH#25198). Uses dialect.getBatchInsertSize().\n * All batches run in the same transaction so the operation is atomic; no partial state on failure.\n * Caller must pass an active transaction (trx) — do not call without one.\n */\nasync function batchInsertJoinTable(\n db: Database,\n joinTableName: string,\n rows: Record<string, unknown>[],\n trx: any,\n options?: { onConflict?: string[]; merge?: string[]; ignore?: boolean }\n): Promise<void> {\n if (rows.length === 0) return;\n if (trx == null) {\n throw new Error(\n 'batchInsertJoinTable requires a transaction so all batches commit or roll back atomically'\n );\n }\n const batchSize = db.dialect.getBatchInsertSize();\n for (let i = 0; i < rows.length; i += batchSize) {\n const chunk = rows.slice(i, i + batchSize);\n let qb = createQueryBuilder(joinTableName, db).insert(chunk).transacting(trx);\n if (options?.onConflict) {\n qb = qb.onConflict(options.onConflict);\n if (options.merge) qb.merge(options.merge);\n else if (options.ignore) qb.ignore();\n }\n await qb.execute();\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n isObject(value) && !isNil(value);\n\nconst toId = (value: unknown | { id: unknown }): ID => {\n if (isRecord(value) && 'id' in value && isValidId(value.id)) {\n return value.id;\n }\n\n if (isValidId(value)) {\n return value;\n }\n\n throw new Error(`Invalid id, expected a string or integer, got ${JSON.stringify(value)}`);\n};\nconst toIds = (value: unknown): ID[] => castArray(value || []).map(toId);\n\nconst isValidId = (value: unknown): value is ID => isString(value) || isInteger(value);\n\nconst isValidObjectId = (value: unknown): value is Entity =>\n isRecord(value) && 'id' in value && isValidId(value.id);\n\nconst toIdArray = (\n data: unknown\n): {\n id: ID;\n __pivot?: { [key: string]: any };\n [key: string]: any;\n}[] => {\n const array = castArray(data)\n .filter((datum) => !isNil(datum))\n .map((datum) => {\n // if it is a string or an integer return an obj with id = to datum\n if (isValidId(datum)) {\n return { id: datum, __pivot: {} };\n }\n\n // if it is an object check it has at least a valid id\n if (!isValidObjectId(datum)) {\n throw new Error(`Invalid id, expected a string or integer, got ${datum}`);\n }\n\n return datum;\n });\n\n return uniqWith(isEqual, array);\n};\n\ntype ScalarAssoc = string | number | null;\ntype Assocs =\n | ScalarAssoc\n | { id: ScalarAssoc | Array<ScalarAssoc> }\n | Array<ScalarAssoc>\n | {\n set?: Array<ScalarAssoc> | null;\n options?: { strict?: boolean };\n connect?: Array<{\n id: ScalarAssoc;\n position?: { start?: boolean; end?: boolean; before?: ID; after?: ID };\n __pivot?: any;\n __type?: any;\n }> | null;\n disconnect?: Array<ScalarAssoc> | null;\n };\n\nconst toAssocs = (data: Assocs) => {\n if (\n isArray(data) ||\n isString(data) ||\n isNumber(data) ||\n isNull(data) ||\n (isRecord(data) && 'id' in data)\n ) {\n return {\n set: isNull(data) ? data : toIdArray(data),\n };\n }\n\n if (data?.set) {\n return {\n set: isNull(data.set) ? data.set : toIdArray(data.set),\n };\n }\n\n return {\n options: {\n strict: data?.options?.strict,\n },\n connect: toIdArray(data?.connect).map((elm) => ({\n id: elm.id,\n position: elm.position ? elm.position : { end: true },\n __pivot: elm.__pivot ?? {},\n __type: elm.__type,\n })),\n disconnect: toIdArray(data?.disconnect),\n };\n};\n\nconst processData = (\n metadata: Meta,\n data: Record<string, unknown> = {},\n { withDefaults = false } = {}\n) => {\n const { attributes } = metadata;\n\n const obj: Record<string, unknown> = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (types.isScalarAttribute(attribute)) {\n const field = createField(attribute);\n\n if (isUndefined(data[attributeName])) {\n if (!isUndefined(attribute.default) && withDefaults) {\n if (typeof attribute.default === 'function') {\n obj[attributeName] = attribute.default();\n } else {\n obj[attributeName] = attribute.default;\n }\n }\n continue;\n }\n\n if (\n 'validate' in field &&\n typeof field.validate === 'function' &&\n data[attributeName] !== null\n ) {\n field.validate(data[attributeName]);\n }\n\n const val = data[attributeName] === null ? null : field.toDB(data[attributeName]);\n\n obj[attributeName] = val;\n }\n\n if (types.isRelationalAttribute(attribute)) {\n // oneToOne & manyToOne\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n const joinColumnName = attribute.joinColumn.name;\n\n // allow setting to null\n const attrValue = !isUndefined(data[attributeName])\n ? data[attributeName]\n : data[joinColumnName];\n\n if (isNull(attrValue)) {\n obj[joinColumnName] = attrValue;\n } else if (!isUndefined(attrValue)) {\n obj[joinColumnName] = toId(attrValue);\n }\n\n continue;\n }\n\n if ('morphColumn' in attribute && attribute.morphColumn && attribute.owner) {\n const { idColumn, typeColumn, typeField = '__type' } = attribute.morphColumn;\n\n const value = data[attributeName] as Record<string, unknown>;\n\n if (value === null) {\n Object.assign(obj, {\n [idColumn.name]: null,\n [typeColumn.name]: null,\n });\n\n continue;\n }\n\n if (!isUndefined(value)) {\n if (!has('id', value) || !has(typeField, value)) {\n throw new Error(`Expects properties ${typeField} an id to make a morph association`);\n }\n\n Object.assign(obj, {\n [idColumn.name]: value.id,\n [typeColumn.name]: value[typeField],\n });\n }\n }\n }\n }\n\n return obj;\n};\nexport const createEntityManager = (db: Database): EntityManager => {\n const repoMap: Record<string, Repository> = {};\n\n return {\n async findOne(uid, params) {\n const states = await db.lifecycles.run('beforeFindOne', uid, { params });\n\n const result = await this.createQueryBuilder(uid)\n .init(params)\n .first()\n .execute<Entity | null>();\n\n await db.lifecycles.run('afterFindOne', uid, { params, result }, states);\n\n return result;\n },\n\n // should we name it findOne because people are used to it ?\n async findMany(uid, params) {\n const states = await db.lifecycles.run('beforeFindMany', uid, { params });\n\n const result = await this.createQueryBuilder(uid).init(params).execute<any[]>();\n\n await db.lifecycles.run('afterFindMany', uid, { params, result }, states);\n\n return result;\n },\n\n async count(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCount', uid, { params });\n\n const res = await this.createQueryBuilder(uid)\n .init(pick(['_q', 'where', 'filters'], params))\n .count()\n .first()\n .execute<{ count: number }>();\n\n const result = Number(res.count);\n\n await db.lifecycles.run('afterCount', uid, { params, result }, states);\n\n return result;\n },\n\n async create(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCreate', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { data } = params;\n\n if (!isPlainObject(data)) {\n throw new Error('Create expects a data object');\n }\n\n const dataToInsert = processData(metadata, data, { withDefaults: true });\n\n const res = await this.createQueryBuilder(uid)\n .insert(dataToInsert)\n .execute<Array<ID | { id: ID }>>();\n\n const id = isRecord(res[0]) ? res[0].id : res[0];\n\n const trx = await strapi.db.transaction();\n try {\n await this.attachRelations(uid, id, data, { transaction: trx.get() });\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n await this.createQueryBuilder(uid).where({ id }).delete().execute();\n throw e;\n }\n\n // TODO: in case there is no select or populate specified return the inserted data ?\n // TODO: do not trigger the findOne lifecycles ?\n const result = await this.findOne(uid, {\n where: { id },\n select: params.select,\n populate: params.populate,\n filters: params.filters,\n });\n\n await db.lifecycles.run('afterCreate', uid, { params, result }, states);\n\n return result;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async createMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCreateMany', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { data } = params;\n\n if (!isArray(data)) {\n throw new Error('CreateMany expects data to be an array');\n }\n\n const dataToInsert = data.map((datum) =>\n processData(metadata, datum, { withDefaults: true })\n );\n\n if (isEmpty(dataToInsert)) {\n throw new Error('Nothing to insert');\n }\n\n const batchSize = db.dialect.getBatchInsertSize();\n const trx = await db.transaction();\n let createdEntries: Array<ID | { id: ID }> = [];\n try {\n for (let i = 0; i < dataToInsert.length; i += batchSize) {\n const chunk = dataToInsert.slice(i, i + batchSize);\n const chunkResult = await this.createQueryBuilder(uid)\n .insert(chunk)\n .transacting(trx.get())\n .execute<Array<ID | { id: ID }>>();\n createdEntries = createdEntries.concat(\n Array.isArray(chunkResult) ? chunkResult : [chunkResult]\n );\n }\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n\n const result = {\n count: data.length,\n ids: createdEntries.map((entry) => (typeof entry === 'object' ? entry?.id : entry)),\n };\n\n await db.lifecycles.run('afterCreateMany', uid, { params, result }, states);\n\n return result;\n },\n\n async update(uid, params = {}) {\n const states = await db.lifecycles.run('beforeUpdate', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { where, data } = params;\n\n if (!isPlainObject(data)) {\n throw new Error('Update requires a data object');\n }\n\n if (isEmpty(where)) {\n throw new Error('Update requires a where parameter');\n }\n\n const entity = await this.createQueryBuilder(uid)\n .select('*')\n .where(where)\n .first()\n .execute<{ id: ID }>({ mapResults: false });\n\n if (!entity) {\n return null;\n }\n\n const { id } = entity;\n\n const dataToUpdate = processData(metadata, data);\n\n if (!isEmpty(dataToUpdate)) {\n await this.createQueryBuilder(uid).where({ id }).update(dataToUpdate).execute();\n }\n\n const trx = await strapi.db.transaction();\n try {\n await this.updateRelations(uid, id, data, { transaction: trx.get() });\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n await this.createQueryBuilder(uid).where({ id }).update(entity).execute();\n throw e;\n }\n\n // TODO: do not trigger the findOne lifecycles ?\n const result = await this.findOne(uid, {\n where: { id },\n select: params.select,\n populate: params.populate,\n filters: params.filters,\n });\n\n await db.lifecycles.run('afterUpdate', uid, { params, result }, states);\n\n return result;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async updateMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeUpdateMany', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { where, data } = params;\n\n const dataToUpdate = processData(metadata, data);\n\n if (isEmpty(dataToUpdate)) {\n throw new Error('Update requires data');\n }\n\n const updatedRows = await this.createQueryBuilder(uid)\n .where(where)\n .update(dataToUpdate)\n .execute<number>();\n\n const result = { count: updatedRows };\n\n await db.lifecycles.run('afterUpdateMany', uid, { params, result }, states);\n\n return result;\n },\n\n async delete(uid, params = {}) {\n const states = await db.lifecycles.run('beforeDelete', uid, { params });\n\n const { where, select, populate } = params;\n\n if (isEmpty(where)) {\n throw new Error('Delete requires a where parameter');\n }\n\n // TODO: do not trigger the findOne lifecycles ?\n const entity = await this.findOne(uid, {\n select: select && ['id'].concat(select),\n where,\n populate,\n });\n\n if (!entity) {\n return null;\n }\n\n const { id } = entity;\n\n await this.createQueryBuilder(uid).where({ id }).delete().execute();\n\n const trx = await strapi.db.transaction();\n try {\n await this.deleteRelations(uid, id, { transaction: trx.get() });\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n\n await db.lifecycles.run('afterDelete', uid, { params, result: entity }, states);\n\n return entity;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async deleteMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeDeleteMany', uid, { params });\n\n const { where } = params;\n\n const deletedRows = await this.createQueryBuilder(uid)\n .where(where)\n .delete()\n .execute<number>({ mapResults: false });\n\n const result = { count: deletedRows };\n\n await db.lifecycles.run('afterDeleteMany', uid, { params, result }, states);\n\n return result;\n },\n\n /**\n * Attach relations to a new entity\n */\n async attachRelations(uid, id, data, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n const isValidLink = has(attributeName, data) && !isNil(data[attributeName]);\n\n if (attribute.type !== 'relation' || !isValidLink) {\n continue;\n }\n\n const cleanRelationData = toAssocs(data[attributeName]);\n\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n /**\n * morphOne and morphMany relations\n */\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n if (targetAttribute.type !== 'relation') {\n throw new Error(\n `Expected target attribute ${target}.${morphBy} to be a relation attribute`\n );\n }\n\n if (targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const relId = toId(cleanRelationData.set?.[0]);\n\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: id, [typeColumn.name]: uid })\n .where({ id: relId })\n .transacting(trx)\n .execute();\n } else if (targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n if (isEmpty(cleanRelationData.set)) {\n continue;\n }\n\n const rows =\n cleanRelationData.set?.map((data, idx) => {\n return {\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n field: attributeName,\n };\n }) ?? [];\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n }\n\n continue;\n } else if (attribute.relation === 'morphToOne') {\n /**\n * morphToOne\n */\n // handled on the entry itself\n continue;\n } else if (attribute.relation === 'morphToMany') {\n /**\n * morphToMany\n */\n const { joinTable } = attribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n if (isEmpty(cleanRelationData.set) && isEmpty(cleanRelationData.connect)) {\n continue;\n }\n\n // set happens before connect/disconnect\n const dataset = cleanRelationData.set || cleanRelationData.connect || [];\n\n const rows = dataset.map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField as '__type'],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })) satisfies Record<string, any>[];\n\n const orderMap = relationsOrderer(\n [],\n morphColumn.idColumn.name,\n 'order',\n true // Always make a strict connect when inserting\n )\n .connect(\n // Merge id & __type to get a single id key\n dataset.map(encodePolymorphicRelation({ idColumn: 'id', typeColumn: typeField }))\n )\n .get()\n // set the order based on the order of the ids\n .reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx + 1 }), {} as Record<ID, number>);\n\n rows.forEach((row: Record<string, unknown>) => {\n const rowId = row[morphColumn.idColumn.name] as ID;\n const rowType = row[morphColumn.typeColumn.name] as string;\n const encodedId = encodePolymorphicId(rowId, rowType);\n\n row.order = orderMap[encodedId];\n });\n\n // delete previous relations\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows as any, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n\n continue;\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n const relIdsToAdd = toIds(cleanRelationData.set);\n if (\n attribute.relation === 'oneToOne' &&\n isBidirectional(attribute) &&\n relIdsToAdd.length\n ) {\n await this.createQueryBuilder(uid)\n .where({ [attribute.joinColumn.name]: relIdsToAdd, id: { $ne: id } })\n .update({ [attribute.joinColumn.name]: null })\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n // oneToOne oneToMany on the non owning side\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n // TODO: check it is an id & the entity exists (will throw due to FKs otherwise so not a big pbl in SQL)\n const relIdsToAdd = toIds(cleanRelationData.set);\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n\n await this.createQueryBuilder(target)\n .update({ [attribute.joinColumn.referencedColumn]: id })\n // NOTE: works if it is an array or a single id\n .where({ id: relIdsToAdd })\n .transacting(trx)\n .execute();\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n // need to set the column on the target\n\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } =\n joinTable;\n\n const relsToAdd = (cleanRelationData.set || cleanRelationData.connect) ?? [];\n const relIdsToadd = toIds(relsToAdd);\n\n if (isBidirectional(attribute) && isOneToAny(attribute)) {\n await deletePreviousOneToAnyRelations({\n id,\n attribute,\n relIdsToadd,\n db,\n transaction: trx,\n });\n }\n\n // prepare new relations to insert\n const insert = uniqBy('id', relsToAdd).map((data) => {\n return {\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: data.id,\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n };\n }) satisfies Record<string, any>[];\n\n // add order value\n if (cleanRelationData.set && hasOrderColumn(attribute)) {\n insert.forEach((data: Record<string, unknown>, idx) => {\n data[orderColumnName] = idx + 1;\n });\n } else if (cleanRelationData.connect && hasOrderColumn(attribute)) {\n // use position attributes to calculate order\n const orderMap = relationsOrderer(\n [],\n inverseJoinColumn.name,\n joinTable.orderColumnName,\n true // Always make an strict connect when inserting\n )\n .connect(relsToAdd)\n .get()\n // set the order based on the order of the ids\n .reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx }), {} as Record<ID, number>);\n\n insert.forEach((row: Record<string, unknown>) => {\n row[orderColumnName] = orderMap[row[inverseJoinColumn.name] as number];\n });\n }\n\n // add inv_order value\n if (hasInverseOrderColumn(attribute)) {\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, relIdsToadd)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {} as Record<string, number>\n );\n\n insert.forEach((rel) => {\n rel[inverseOrderColumnName] = (maxMap[rel[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n if (insert.length === 0) {\n continue;\n }\n\n // insert new relations\n await batchInsertJoinTable(db, joinTable.name, insert, trx);\n }\n }\n },\n\n /**\n * Updates relations of an existing entity\n */\n // TODO: check relation exists (handled by FKs except for polymorphics)\n async updateRelations(uid, id, data, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (attribute.type !== 'relation' || !has(attributeName, data)) {\n continue;\n }\n const cleanRelationData = toAssocs(data[attributeName]);\n\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n // update instead of deleting because the relation is directly on the entity table\n // and not in a join table\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: null, [typeColumn.name]: null })\n .where({ [idColumn.name]: id, [typeColumn.name]: uid })\n .transacting(trx)\n .execute();\n\n if (!isNull(cleanRelationData.set)) {\n const relId = toIds(cleanRelationData.set?.[0]);\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: id, [typeColumn.name]: uid })\n .where({ id: relId })\n .transacting(trx)\n .execute();\n }\n } else if (\n targetAttribute.type === 'relation' &&\n targetAttribute.relation === 'morphToMany'\n ) {\n const { joinTable } = targetAttribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const hasSet = !isEmpty(cleanRelationData.set);\n const hasConnect = !isEmpty(cleanRelationData.connect);\n const hasDisconnect = !isEmpty(cleanRelationData.disconnect);\n\n // for connect/disconnect without a set, only modify those relations\n if (!hasSet && (hasConnect || hasDisconnect)) {\n // delete disconnects and connects (to prevent duplicates when we add them later)\n const idsToDelete = [\n ...(cleanRelationData.disconnect || []),\n ...(cleanRelationData.connect || []),\n ];\n\n if (!isEmpty(idsToDelete)) {\n const where = {\n $or: idsToDelete.map((item: any) => {\n return {\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n [joinColumn.name]: item.id,\n ...(joinTable.on || {}),\n field: attributeName,\n };\n }),\n };\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where(where)\n .transacting(trx)\n .execute();\n }\n\n // connect relations\n if (hasConnect) {\n // Query database to find the order of the last relation\n const start = await this.createQueryBuilder(joinTable.name)\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n })\n .max('order')\n .first()\n .transacting(trx)\n .execute();\n\n const startOrder = (start as any)?.max || 0;\n\n const rows = (cleanRelationData.connect ?? []).map((data, idx) => ({\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: startOrder + idx + 1,\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n }\n\n continue;\n }\n\n // delete all relations\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n field: attributeName,\n })\n .transacting(trx)\n .execute();\n\n if (hasSet) {\n const rows = (cleanRelationData.set ?? []).map((data, idx) => ({\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n }\n }\n\n continue;\n }\n\n if (attribute.relation === 'morphToOne') {\n // handled on the entry itself\n continue;\n }\n\n if (attribute.relation === 'morphToMany') {\n const { joinTable } = attribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n const hasSet = !isEmpty(cleanRelationData.set);\n const hasConnect = !isEmpty(cleanRelationData.connect);\n const hasDisconnect = !isEmpty(cleanRelationData.disconnect);\n\n // for connect/disconnect without a set, only modify those relations\n if (!hasSet && (hasConnect || hasDisconnect)) {\n // delete disconnects and connects (to prevent duplicates when we add them later)\n const idsToDelete = [\n ...(cleanRelationData.disconnect || []),\n ...(cleanRelationData.connect || []),\n ];\n\n const rowsToDelete = [\n ...(cleanRelationData.disconnect ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })),\n ...(cleanRelationData.connect ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n // @ts-expect-error TODO\n [typeColumn.name]: data[typeField],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })),\n ];\n\n const adjacentRelations = await this.createQueryBuilder(joinTable.name)\n .where({\n $or: [\n {\n [joinColumn.name]: id,\n [idColumn.name]: {\n $in: compact(\n cleanRelationData.connect?.map(\n (r) => r.position?.after || r.position?.before\n )\n ),\n },\n },\n {\n [joinColumn.name]: id,\n order: this.createQueryBuilder(joinTable.name)\n .max('order')\n .where({ [joinColumn.name]: id })\n .where(joinTable.on || {})\n .transacting(trx)\n .getKnexQuery(),\n },\n ],\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, any>>>();\n\n if (!isEmpty(idsToDelete)) {\n const where = {\n $or: idsToDelete.map((item: any) => {\n return {\n [idColumn.name]: item.id,\n [typeColumn.name]: item[typeField],\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n };\n }),\n };\n\n // delete previous relations\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where(where)\n .transacting(trx)\n .execute();\n\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rowsToDelete as any, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n }\n\n // connect relations\n if (hasConnect) {\n const dataset = cleanRelationData.connect || [];\n\n const rows = dataset.map((data) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField as '__type'],\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n const orderMap = relationsOrderer(\n // Merge id & __type to get a single id key\n adjacentRelations.map(\n encodePolymorphicRelation({\n idColumn: idColumn.name,\n typeColumn: typeColumn.name,\n })\n ),\n idColumn.name,\n 'order',\n cleanRelationData.options?.strict\n )\n .connect(\n // Merge id & __type to get a single id key\n dataset.map(encodePolymorphicRelation({ idColumn: 'id', typeColumn: '__type' }))\n )\n .getOrderMap();\n\n rows.forEach((row: Record<string, unknown>) => {\n const rowId = row[idColumn.name] as number;\n const rowType = row[typeColumn.name] as string;\n const encodedId = encodePolymorphicId(rowId, rowType);\n\n row.order = orderMap[encodedId];\n });\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n }\n\n continue;\n }\n\n if (hasSet) {\n // delete all relations for this entity\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n })\n .transacting(trx)\n .execute();\n\n const rows = (cleanRelationData.set ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField],\n field: attributeName,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })) satisfies Record<string, any>[];\n\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n }\n\n continue;\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n // handled in the row itself\n continue;\n }\n\n // oneToOne oneToMany on the non owning side.\n // Since it is a join column no need to remove previous relations\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n\n if (!isNull(cleanRelationData.set)) {\n const relIdsToAdd = toIds(cleanRelationData.set);\n await this.createQueryBuilder(target)\n .where({ id: relIdsToAdd })\n .update({ [attribute.joinColumn.referencedColumn]: id })\n .transacting(trx)\n .execute();\n }\n }\n\n if (attribute.joinTable) {\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } =\n joinTable;\n const select = [joinColumn.name, inverseJoinColumn.name];\n if (hasOrderColumn(attribute)) {\n select.push(orderColumnName);\n }\n if (hasInverseOrderColumn(attribute)) {\n select.push(inverseOrderColumnName);\n }\n\n // only delete relations\n if (isNull(cleanRelationData.set)) {\n await deleteRelations({ id, attribute, db, relIdsToDelete: 'all', transaction: trx });\n } else {\n const isPartialUpdate = !has('set', cleanRelationData);\n let relIdsToaddOrMove: ID[];\n\n if (isPartialUpdate) {\n if (isAnyToOne(attribute)) {\n // TODO: V5 find a fix to connect multiple versions of a document at the same time on xToOne relations\n // cleanRelationData.connect = cleanRelationData.connect?.slice(-1);\n }\n relIdsToaddOrMove = toIds(cleanRelationData.connect);\n const relIdsToDelete = toIds(\n differenceWith(\n isEqual,\n cleanRelationData.disconnect,\n cleanRelationData.connect ?? []\n )\n );\n\n if (!isEmpty(relIdsToDelete)) {\n await deleteRelations({ id, attribute, db, relIdsToDelete, transaction: trx });\n }\n\n if (isEmpty(cleanRelationData.connect)) {\n continue;\n }\n\n // Fetch current relations to handle ordering\n let currentMovingRels: Record<string, ID>[] = [];\n\n if (hasOrderColumn(attribute) || hasInverseOrderColumn(attribute)) {\n currentMovingRels = await this.createQueryBuilder(joinTable.name)\n .select(select)\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToaddOrMove },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute();\n }\n\n // prepare relations to insert\n const insert = uniqBy('id', cleanRelationData.connect).map((relToAdd) => ({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: relToAdd.id,\n ...(joinTable.on || {}),\n ...(relToAdd.__pivot || {}),\n }));\n\n if (hasOrderColumn(attribute)) {\n // Get all adjacent relations and the one with the highest order\n const adjacentRelations = await this.createQueryBuilder(joinTable.name)\n .where({\n $or: [\n {\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: {\n $in: compact(\n cleanRelationData.connect?.map(\n (r) => r.position?.after || r.position?.before\n )\n ),\n },\n },\n {\n [joinColumn.name]: id,\n [orderColumnName]: this.createQueryBuilder(joinTable.name)\n .max(orderColumnName)\n .where({ [joinColumn.name]: id })\n .where(joinTable.on || {})\n .transacting(trx)\n .getKnexQuery(),\n },\n ],\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, any>>>();\n\n const orderMap = relationsOrderer(\n adjacentRelations,\n inverseJoinColumn.name,\n joinTable.orderColumnName,\n cleanRelationData.options?.strict\n )\n .connect(cleanRelationData.connect ?? [])\n .getOrderMap();\n\n insert.forEach((row) => {\n row[orderColumnName] = orderMap[row[inverseJoinColumn.name]];\n });\n }\n\n // add inv order value\n if (hasInverseOrderColumn(attribute)) {\n const nonExistingRelsIds: ID[] = difference(\n relIdsToaddOrMove,\n map(inverseJoinColumn.name, currentMovingRels)\n );\n\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, nonExistingRelsIds)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {}\n );\n\n insert.forEach((row) => {\n row[inverseOrderColumnName] = (maxMap[row[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n // insert rows\n await batchInsertJoinTable(db, joinTable.name, insert, trx, {\n onConflict: joinTable.pivotColumns,\n merge: hasOrderColumn(attribute) ? [orderColumnName] : undefined,\n ignore: !hasOrderColumn(attribute),\n });\n\n // remove gap between orders\n await cleanOrderColumns({ attribute, db, id, transaction: trx });\n } else {\n if (isAnyToOne(attribute)) {\n cleanRelationData.set = cleanRelationData.set?.slice(-1);\n }\n // overwrite all relations\n relIdsToaddOrMove = toIds(cleanRelationData.set);\n await deleteRelations({\n id,\n attribute,\n db,\n relIdsToDelete: 'all',\n relIdsToNotDelete: relIdsToaddOrMove,\n transaction: trx,\n });\n\n if (isEmpty(cleanRelationData.set)) {\n continue;\n }\n\n const insert = uniqBy('id', cleanRelationData.set).map((relToAdd) => ({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: relToAdd.id,\n ...(joinTable.on || {}),\n ...(relToAdd.__pivot || {}),\n }));\n\n // add order value\n if (hasOrderColumn(attribute)) {\n insert.forEach((row, idx) => {\n row[orderColumnName] = idx + 1;\n });\n }\n\n // add inv order value\n if (hasInverseOrderColumn(attribute)) {\n const existingRels = await this.createQueryBuilder(joinTable.name)\n .select(inverseJoinColumn.name)\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToaddOrMove },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, ID>>>();\n\n const inverseRelsIds = map(inverseJoinColumn.name, existingRels);\n\n const nonExistingRelsIds = difference(relIdsToaddOrMove, inverseRelsIds);\n\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, nonExistingRelsIds)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {}\n );\n\n insert.forEach((row: any) => {\n row[inverseOrderColumnName] = (maxMap[row[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n // insert rows\n await batchInsertJoinTable(db, joinTable.name, insert, trx, {\n onConflict: joinTable.pivotColumns,\n merge: hasOrderColumn(attribute) ? [orderColumnName] : undefined,\n ignore: !hasOrderColumn(attribute),\n });\n }\n\n // Delete the previous relations for oneToAny relations\n if (isBidirectional(attribute) && isOneToAny(attribute)) {\n await deletePreviousOneToAnyRelations({\n id,\n attribute,\n relIdsToadd: relIdsToaddOrMove,\n db,\n transaction: trx,\n });\n }\n\n // Delete the previous relations for anyToOne relations\n if (isAnyToOne(attribute)) {\n await deletePreviousAnyToOneRelations({\n id,\n attribute,\n relIdToadd: relIdsToaddOrMove[0],\n db,\n transaction: trx,\n });\n }\n }\n }\n }\n },\n\n /**\n * Delete relational associations of an existing entity\n * This removes associations but doesn't do cascade deletions for components for example. This will be handled on the entity service layer instead\n * NOTE: Most of the deletion should be handled by ON DELETE CASCADE for dialects that have FKs\n *\n * @param {EntityManager} em - entity manager instance\n * @param {Metadata} metadata - model metadta\n * @param {ID} id - entity ID\n */\n async deleteRelations(uid, id, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n continue;\n }\n\n /*\n if morphOne | morphMany\n if morphBy is morphToOne\n set null\n if morphBy is morphToOne\n delete links\n */\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: null, [typeColumn.name]: null })\n .where({ [idColumn.name]: id, [typeColumn.name]: uid })\n .transacting(trx)\n .execute();\n } else if (\n targetAttribute.type === 'relation' &&\n targetAttribute.relation === 'morphToMany'\n ) {\n const { joinTable } = targetAttribute;\n const { morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n field: attributeName,\n })\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n /*\n if morphToOne\n nothing to do\n */\n if (attribute.relation === 'morphToOne') {\n // do nothing\n }\n\n /*\n if morphToMany\n delete links\n */\n if (attribute.relation === 'morphToMany') {\n const { joinTable } = attribute;\n const { joinColumn } = joinTable;\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n })\n .transacting(trx)\n .execute();\n\n continue;\n }\n\n // do not need to delete links when using foreign keys\n if (db.dialect.usesForeignKeys()) {\n continue;\n }\n\n // NOTE: we do not remove existing associations with the target as it should handled by unique FKs instead\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n // nothing to do => relation already added on the table\n continue;\n }\n\n // oneToOne oneToMany on the non owning side.\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n await deleteRelations({ id, attribute, db, relIdsToDelete: 'all', transaction: trx });\n }\n }\n },\n\n // TODO: add lifecycle events\n async populate(uid, entity, populate) {\n const entry = await this.findOne(uid, {\n select: ['id'],\n where: { id: entity.id },\n populate,\n });\n\n return { ...entity, ...entry };\n },\n\n // TODO: add lifecycle events\n async load(uid, entity, fields, populate) {\n const { attributes } = db.metadata.get(uid);\n\n const fieldsArr = castArray(fields);\n fieldsArr.forEach((field) => {\n const attribute = attributes[field];\n\n if (!attribute || attribute.type !== 'relation') {\n throw new Error(`Invalid load. Expected ${field} to be a relational attribute`);\n }\n });\n\n const entry = await this.findOne(uid, {\n select: ['id'],\n where: { id: entity.id },\n populate: fieldsArr.reduce(\n (acc, field) => {\n acc[field] = populate || true;\n return acc;\n },\n {} as Record<string, unknown>\n ),\n });\n\n if (!entry) {\n return null;\n }\n\n if (Array.isArray(fields)) {\n return pick(fields, entry);\n }\n\n return entry[fields];\n },\n\n // cascading\n // aggregations\n // -> avg\n // -> min\n // -> max\n // -> grouping\n\n // formulas\n // custom queries\n\n // utilities\n // -> map result\n // -> map input\n\n // extra features\n // -> virtuals\n // -> private\n\n /**\n * Insert join-table rows in batches (GH#25198).\n * Uses dialect.getBatchInsertSize() so SQLite etc. can enforce a safe batch size.\n * All batches run in the same transaction; caller must pass an active transaction.\n */\n async insertJoinTableRows(\n joinTableName: string,\n rows: Record<string, unknown>[],\n trx: any,\n options?: { onConflict?: string[]; merge?: string[]; ignore?: boolean }\n ) {\n if (rows.length === 0) return;\n if (trx == null) {\n throw new Error(\n 'insertJoinTableRows requires a transaction so all batches commit or roll back atomically'\n );\n }\n const batchSize = db.dialect.getBatchInsertSize();\n for (let i = 0; i < rows.length; i += batchSize) {\n const chunk = rows.slice(i, i + batchSize);\n let qb = this.createQueryBuilder(joinTableName).insert(chunk).transacting(trx);\n if (options?.onConflict) {\n qb = qb.onConflict(options.onConflict);\n if (options.merge) qb.merge(options.merge);\n else if (options.ignore) qb.ignore();\n }\n await qb.execute();\n }\n },\n\n createQueryBuilder(uid) {\n return createQueryBuilder(uid, db);\n },\n\n getRepository(uid) {\n if (!repoMap[uid]) {\n repoMap[uid] = createRepository(uid, db);\n }\n\n return repoMap[uid];\n },\n };\n};\n"],"names":["batchInsertJoinTable","db","joinTableName","rows","trx","options","length","Error","batchSize","dialect","getBatchInsertSize","i","chunk","slice","qb","createQueryBuilder","insert","transacting","onConflict","merge","ignore","execute","isRecord","value","isObject","isNil","toId","isValidId","id","JSON","stringify","toIds","castArray","map","isString","isInteger","isValidObjectId","toIdArray","data","array","filter","datum","__pivot","uniqWith","isEqual","toAssocs","isArray","isNumber","isNull","set","strict","connect","elm","position","end","__type","disconnect","processData","metadata","withDefaults","attributes","obj","attributeName","Object","keys","attribute","types","field","createField","isUndefined","default","validate","val","toDB","joinColumn","owner","joinColumnName","name","attrValue","morphColumn","idColumn","typeColumn","typeField","assign","has","createEntityManager","repoMap","findOne","uid","params","states","lifecycles","run","result","init","first","findMany","count","res","pick","Number","create","get","isPlainObject","dataToInsert","strapi","transaction","attachRelations","commit","e","rollback","where","delete","select","populate","filters","createMany","isEmpty","createdEntries","chunkResult","concat","Array","ids","entry","update","entity","mapResults","dataToUpdate","updateRelations","updateMany","updatedRows","deleteRelations","deleteMany","deletedRows","isValidLink","type","cleanRelationData","relation","target","morphBy","targetAttribute","relId","joinTable","idx","on","order","dataset","orderMap","relationsOrderer","encodePolymorphicRelation","reduce","acc","rel","forEach","row","rowId","rowType","encodedId","encodePolymorphicId","deleteRelatedMorphOneRelationsAfterMorphToManyUpdate","relIdsToAdd","isBidirectional","$ne","referencedColumn","inverseJoinColumn","orderColumnName","inverseOrderColumnName","relsToAdd","relIdsToadd","isOneToAny","deletePreviousOneToAnyRelations","uniqBy","hasOrderColumn","hasInverseOrderColumn","maxResults","getConnection","max","as","whereIn","groupBy","from","maxMap","hasSet","hasConnect","hasDisconnect","idsToDelete","$or","item","start","startOrder","rowsToDelete","adjacentRelations","$in","compact","r","after","before","getKnexQuery","getOrderMap","push","relIdsToDelete","isPartialUpdate","relIdsToaddOrMove","isAnyToOne","differenceWith","currentMovingRels","relToAdd","nonExistingRelsIds","difference","pivotColumns","undefined","cleanOrderColumns","relIdsToNotDelete","existingRels","inverseRelsIds","deletePreviousAnyToOneRelations","relIdToadd","usesForeignKeys","load","fields","fieldsArr","insertJoinTableRows","getRepository","createRepository"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/entity-manager/index.ts"],"sourcesContent":["import {\n castArray,\n compact,\n difference,\n differenceWith,\n has,\n isArray,\n isEmpty,\n isEqual,\n isInteger,\n isNil,\n isNull,\n isNumber,\n isObject,\n isPlainObject,\n isString,\n isUndefined,\n map,\n pick,\n uniqBy,\n uniqWith,\n} from 'lodash/fp';\n\nimport * as types from '../utils/types';\nimport { createField } from '../fields';\nimport { createQueryBuilder } from '../query';\nimport { createRepository } from './entity-repository';\nimport {\n deleteRelatedMorphOneRelationsAfterMorphToManyUpdate,\n encodePolymorphicRelation,\n encodePolymorphicId,\n} from './morph-relations';\nimport {\n isBidirectional,\n isAnyToOne,\n isOneToAny,\n hasOrderColumn,\n hasInverseOrderColumn,\n} from '../metadata';\nimport {\n deletePreviousOneToAnyRelations,\n deletePreviousAnyToOneRelations,\n deleteRelations,\n cleanOrderColumns,\n} from './regular-relations';\nimport { relationsOrderer } from './relations-orderer';\nimport type { Database } from '..';\nimport type { Meta } from '../metadata';\nimport type { ID } from '../types';\nimport { EntityManager, Repository, Entity } from './types';\n\nexport * from './types';\n\n/**\n * Batched join-table insert for SQLite etc. (GH#25198). Uses dialect.getBatchInsertSize().\n * All batches run in the same transaction so the operation is atomic; no partial state on failure.\n * Caller must pass an active transaction (trx) — do not call without one.\n */\nasync function batchInsertJoinTable(\n db: Database,\n joinTableName: string,\n rows: Record<string, unknown>[],\n trx: any,\n options?: { onConflict?: string[]; merge?: string[]; ignore?: boolean }\n): Promise<void> {\n if (rows.length === 0) return;\n if (trx == null) {\n throw new Error(\n 'batchInsertJoinTable requires a transaction so all batches commit or roll back atomically'\n );\n }\n const batchSize = db.dialect.getBatchInsertSize();\n for (let i = 0; i < rows.length; i += batchSize) {\n const chunk = rows.slice(i, i + batchSize);\n let qb = createQueryBuilder(joinTableName, db).insert(chunk).transacting(trx);\n if (options?.onConflict) {\n qb = qb.onConflict(options.onConflict);\n if (options.merge) qb.merge(options.merge);\n else if (options.ignore) qb.ignore();\n }\n await qb.execute();\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n isObject(value) && !isNil(value);\n\nconst toId = (value: unknown | { id: unknown }): ID => {\n if (isRecord(value) && 'id' in value && isValidId(value.id)) {\n return value.id;\n }\n\n if (isValidId(value)) {\n return value;\n }\n\n throw new Error(`Invalid id, expected a string or integer, got ${JSON.stringify(value)}`);\n};\nconst toIds = (value: unknown): ID[] => castArray(value || []).map(toId);\n\nconst isValidId = (value: unknown): value is ID => isString(value) || isInteger(value);\n\nconst isValidObjectId = (value: unknown): value is Entity =>\n isRecord(value) && 'id' in value && isValidId(value.id);\n\nconst toIdArray = (\n data: unknown\n): {\n id: ID;\n __pivot?: { [key: string]: any };\n [key: string]: any;\n}[] => {\n const array = castArray(data)\n .filter((datum) => !isNil(datum))\n .map((datum) => {\n // if it is a string or an integer return an obj with id = to datum\n if (isValidId(datum)) {\n return { id: datum, __pivot: {} };\n }\n\n // if it is an object check it has at least a valid id\n if (!isValidObjectId(datum)) {\n throw new Error(`Invalid id, expected a string or integer, got ${datum}`);\n }\n\n return datum;\n });\n\n return uniqWith(isEqual, array);\n};\n\ntype ScalarAssoc = string | number | null;\ntype Assocs =\n | ScalarAssoc\n | { id: ScalarAssoc | Array<ScalarAssoc> }\n | Array<ScalarAssoc>\n | {\n set?: Array<ScalarAssoc> | null;\n options?: { strict?: boolean };\n connect?: Array<{\n id: ScalarAssoc;\n position?: { start?: boolean; end?: boolean; before?: ID; after?: ID };\n __pivot?: any;\n __type?: any;\n }> | null;\n disconnect?: Array<ScalarAssoc> | null;\n };\n\nconst toAssocs = (data: Assocs) => {\n if (\n isArray(data) ||\n isString(data) ||\n isNumber(data) ||\n isNull(data) ||\n (isRecord(data) && 'id' in data)\n ) {\n return {\n set: isNull(data) ? data : toIdArray(data),\n };\n }\n\n if (data?.set) {\n return {\n set: isNull(data.set) ? data.set : toIdArray(data.set),\n };\n }\n\n return {\n options: {\n strict: data?.options?.strict,\n },\n connect: toIdArray(data?.connect).map((elm) => ({\n id: elm.id,\n position: elm.position ? elm.position : { end: true },\n __pivot: elm.__pivot ?? {},\n __type: elm.__type,\n })),\n disconnect: toIdArray(data?.disconnect),\n };\n};\n\nconst processData = (\n metadata: Meta,\n data: Record<string, unknown> = {},\n { withDefaults = false } = {}\n) => {\n const { attributes } = metadata;\n\n const obj: Record<string, unknown> = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (types.isScalarAttribute(attribute)) {\n const field = createField(attribute);\n\n if (isUndefined(data[attributeName])) {\n if (!isUndefined(attribute.default) && withDefaults) {\n if (typeof attribute.default === 'function') {\n obj[attributeName] = attribute.default();\n } else {\n obj[attributeName] = attribute.default;\n }\n }\n continue;\n }\n\n if (\n 'validate' in field &&\n typeof field.validate === 'function' &&\n data[attributeName] !== null\n ) {\n field.validate(data[attributeName]);\n }\n\n const val = data[attributeName] === null ? null : field.toDB(data[attributeName]);\n\n obj[attributeName] = val;\n }\n\n if (types.isRelationalAttribute(attribute)) {\n // oneToOne & manyToOne\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n const joinColumnName = attribute.joinColumn.name;\n\n // allow setting to null\n let attrValue = !isUndefined(data[attributeName])\n ? data[attributeName]\n : data[joinColumnName];\n\n // Legacy single-column storage: only one id fits. Take the last\n // and warn — modern schemas use a join table that can hold both\n // the draft and published rows of the related entry.\n if (\n isObject(attrValue) &&\n !Array.isArray(attrValue) &&\n 'set' in attrValue &&\n Array.isArray(attrValue.set)\n ) {\n const setIds = attrValue.set;\n if (setIds.length > 1) {\n strapi?.log?.warn?.(\n `Multiple ids provided for xToOne relation \"${attributeName}\" stored in a single FK column; keeping only the last id. Consider using a join table (useJoinTable: true) to support multiple versions of a Draft-and-Publish target.`\n );\n }\n attrValue = setIds.length > 0 ? setIds[setIds.length - 1] : null;\n }\n\n if (isNull(attrValue)) {\n obj[joinColumnName] = attrValue;\n } else if (!isUndefined(attrValue)) {\n obj[joinColumnName] = toId(attrValue);\n }\n\n continue;\n }\n\n if ('morphColumn' in attribute && attribute.morphColumn && attribute.owner) {\n const { idColumn, typeColumn, typeField = '__type' } = attribute.morphColumn;\n\n const value = data[attributeName] as Record<string, unknown>;\n\n if (value === null) {\n Object.assign(obj, {\n [idColumn.name]: null,\n [typeColumn.name]: null,\n });\n\n continue;\n }\n\n if (!isUndefined(value)) {\n if (!has('id', value) || !has(typeField, value)) {\n throw new Error(`Expects properties ${typeField} an id to make a morph association`);\n }\n\n Object.assign(obj, {\n [idColumn.name]: value.id,\n [typeColumn.name]: value[typeField],\n });\n }\n }\n }\n }\n\n return obj;\n};\nexport const createEntityManager = (db: Database): EntityManager => {\n const repoMap: Record<string, Repository> = {};\n\n return {\n async findOne(uid, params) {\n const states = await db.lifecycles.run('beforeFindOne', uid, { params });\n\n const result = await this.createQueryBuilder(uid)\n .init(params)\n .first()\n .execute<Entity | null>();\n\n await db.lifecycles.run('afterFindOne', uid, { params, result }, states);\n\n return result;\n },\n\n // should we name it findOne because people are used to it ?\n async findMany(uid, params) {\n const states = await db.lifecycles.run('beforeFindMany', uid, { params });\n\n const result = await this.createQueryBuilder(uid).init(params).execute<any[]>();\n\n await db.lifecycles.run('afterFindMany', uid, { params, result }, states);\n\n return result;\n },\n\n async count(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCount', uid, { params });\n\n const res = await this.createQueryBuilder(uid)\n .init(pick(['_q', 'where', 'filters'], params))\n .count()\n .first()\n .execute<{ count: number }>();\n\n const result = Number(res.count);\n\n await db.lifecycles.run('afterCount', uid, { params, result }, states);\n\n return result;\n },\n\n async create(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCreate', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { data } = params;\n\n if (!isPlainObject(data)) {\n throw new Error('Create expects a data object');\n }\n\n const dataToInsert = processData(metadata, data, { withDefaults: true });\n\n const res = await this.createQueryBuilder(uid)\n .insert(dataToInsert)\n .execute<Array<ID | { id: ID }>>();\n\n const id = isRecord(res[0]) ? res[0].id : res[0];\n\n const trx = await strapi.db.transaction();\n try {\n await this.attachRelations(uid, id, data, { transaction: trx.get() });\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n await this.createQueryBuilder(uid).where({ id }).delete().execute();\n throw e;\n }\n\n // TODO: in case there is no select or populate specified return the inserted data ?\n // TODO: do not trigger the findOne lifecycles ?\n const result = await this.findOne(uid, {\n where: { id },\n select: params.select,\n populate: params.populate,\n filters: params.filters,\n });\n\n await db.lifecycles.run('afterCreate', uid, { params, result }, states);\n\n return result;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async createMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCreateMany', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { data } = params;\n\n if (!isArray(data)) {\n throw new Error('CreateMany expects data to be an array');\n }\n\n const dataToInsert = data.map((datum) =>\n processData(metadata, datum, { withDefaults: true })\n );\n\n if (isEmpty(dataToInsert)) {\n throw new Error('Nothing to insert');\n }\n\n const batchSize = db.dialect.getBatchInsertSize();\n const trx = await db.transaction();\n let createdEntries: Array<ID | { id: ID }> = [];\n try {\n for (let i = 0; i < dataToInsert.length; i += batchSize) {\n const chunk = dataToInsert.slice(i, i + batchSize);\n const chunkResult = await this.createQueryBuilder(uid)\n .insert(chunk)\n .transacting(trx.get())\n .execute<Array<ID | { id: ID }>>();\n createdEntries = createdEntries.concat(\n Array.isArray(chunkResult) ? chunkResult : [chunkResult]\n );\n }\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n\n const result = {\n count: data.length,\n ids: createdEntries.map((entry) => (typeof entry === 'object' ? entry?.id : entry)),\n };\n\n await db.lifecycles.run('afterCreateMany', uid, { params, result }, states);\n\n return result;\n },\n\n async update(uid, params = {}) {\n const states = await db.lifecycles.run('beforeUpdate', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { where, data } = params;\n\n if (!isPlainObject(data)) {\n throw new Error('Update requires a data object');\n }\n\n if (isEmpty(where)) {\n throw new Error('Update requires a where parameter');\n }\n\n const entity = await this.createQueryBuilder(uid)\n .select('*')\n .where(where)\n .first()\n .execute<{ id: ID }>({ mapResults: false });\n\n if (!entity) {\n return null;\n }\n\n const { id } = entity;\n\n const dataToUpdate = processData(metadata, data);\n\n if (!isEmpty(dataToUpdate)) {\n await this.createQueryBuilder(uid).where({ id }).update(dataToUpdate).execute();\n }\n\n const trx = await strapi.db.transaction();\n try {\n await this.updateRelations(uid, id, data, { transaction: trx.get() });\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n await this.createQueryBuilder(uid).where({ id }).update(entity).execute();\n throw e;\n }\n\n // TODO: do not trigger the findOne lifecycles ?\n const result = await this.findOne(uid, {\n where: { id },\n select: params.select,\n populate: params.populate,\n filters: params.filters,\n });\n\n await db.lifecycles.run('afterUpdate', uid, { params, result }, states);\n\n return result;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async updateMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeUpdateMany', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { where, data } = params;\n\n const dataToUpdate = processData(metadata, data);\n\n if (isEmpty(dataToUpdate)) {\n throw new Error('Update requires data');\n }\n\n const updatedRows = await this.createQueryBuilder(uid)\n .where(where)\n .update(dataToUpdate)\n .execute<number>();\n\n const result = { count: updatedRows };\n\n await db.lifecycles.run('afterUpdateMany', uid, { params, result }, states);\n\n return result;\n },\n\n async delete(uid, params = {}) {\n const states = await db.lifecycles.run('beforeDelete', uid, { params });\n\n const { where, select, populate } = params;\n\n if (isEmpty(where)) {\n throw new Error('Delete requires a where parameter');\n }\n\n // TODO: do not trigger the findOne lifecycles ?\n const entity = await this.findOne(uid, {\n select: select && ['id'].concat(select),\n where,\n populate,\n });\n\n if (!entity) {\n return null;\n }\n\n const { id } = entity;\n\n await this.createQueryBuilder(uid).where({ id }).delete().execute();\n\n const trx = await strapi.db.transaction();\n try {\n await this.deleteRelations(uid, id, { transaction: trx.get() });\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n\n await db.lifecycles.run('afterDelete', uid, { params, result: entity }, states);\n\n return entity;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async deleteMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeDeleteMany', uid, { params });\n\n const { where } = params;\n\n const deletedRows = await this.createQueryBuilder(uid)\n .where(where)\n .delete()\n .execute<number>({ mapResults: false });\n\n const result = { count: deletedRows };\n\n await db.lifecycles.run('afterDeleteMany', uid, { params, result }, states);\n\n return result;\n },\n\n /**\n * Attach relations to a new entity\n */\n async attachRelations(uid, id, data, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n const isValidLink = has(attributeName, data) && !isNil(data[attributeName]);\n\n if (attribute.type !== 'relation' || !isValidLink) {\n continue;\n }\n\n const cleanRelationData = toAssocs(data[attributeName]);\n\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n /**\n * morphOne and morphMany relations\n */\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n if (targetAttribute.type !== 'relation') {\n throw new Error(\n `Expected target attribute ${target}.${morphBy} to be a relation attribute`\n );\n }\n\n if (targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const relId = toId(cleanRelationData.set?.[0]);\n\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: id, [typeColumn.name]: uid })\n .where({ id: relId })\n .transacting(trx)\n .execute();\n } else if (targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n if (isEmpty(cleanRelationData.set)) {\n continue;\n }\n\n const rows =\n cleanRelationData.set?.map((data, idx) => {\n return {\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n field: attributeName,\n };\n }) ?? [];\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n }\n\n continue;\n } else if (attribute.relation === 'morphToOne') {\n /**\n * morphToOne\n */\n // handled on the entry itself\n continue;\n } else if (attribute.relation === 'morphToMany') {\n /**\n * morphToMany\n */\n const { joinTable } = attribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n if (isEmpty(cleanRelationData.set) && isEmpty(cleanRelationData.connect)) {\n continue;\n }\n\n // set happens before connect/disconnect\n const dataset = cleanRelationData.set || cleanRelationData.connect || [];\n\n const rows = dataset.map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField as '__type'],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })) satisfies Record<string, any>[];\n\n const orderMap = relationsOrderer(\n [],\n morphColumn.idColumn.name,\n 'order',\n true // Always make a strict connect when inserting\n )\n .connect(\n // Merge id & __type to get a single id key\n dataset.map(encodePolymorphicRelation({ idColumn: 'id', typeColumn: typeField }))\n )\n .get()\n // set the order based on the order of the ids\n .reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx + 1 }), {} as Record<ID, number>);\n\n rows.forEach((row: Record<string, unknown>) => {\n const rowId = row[morphColumn.idColumn.name] as ID;\n const rowType = row[morphColumn.typeColumn.name] as string;\n const encodedId = encodePolymorphicId(rowId, rowType);\n\n row.order = orderMap[encodedId];\n });\n\n // delete previous relations\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows as any, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n\n continue;\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n const relIdsToAdd = toIds(cleanRelationData.set);\n if (\n attribute.relation === 'oneToOne' &&\n isBidirectional(attribute) &&\n relIdsToAdd.length\n ) {\n await this.createQueryBuilder(uid)\n .where({ [attribute.joinColumn.name]: relIdsToAdd, id: { $ne: id } })\n .update({ [attribute.joinColumn.name]: null })\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n // oneToOne oneToMany on the non owning side\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n // TODO: check it is an id & the entity exists (will throw due to FKs otherwise so not a big pbl in SQL)\n const relIdsToAdd = toIds(cleanRelationData.set);\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n\n await this.createQueryBuilder(target)\n .update({ [attribute.joinColumn.referencedColumn]: id })\n // NOTE: works if it is an array or a single id\n .where({ id: relIdsToAdd })\n .transacting(trx)\n .execute();\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n // need to set the column on the target\n\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } =\n joinTable;\n\n const relsToAdd = (cleanRelationData.set || cleanRelationData.connect) ?? [];\n const relIdsToadd = toIds(relsToAdd);\n\n if (isBidirectional(attribute) && isOneToAny(attribute)) {\n await deletePreviousOneToAnyRelations({\n id,\n attribute,\n relIdsToadd,\n db,\n transaction: trx,\n });\n }\n\n // prepare new relations to insert\n const insert = uniqBy('id', relsToAdd).map((data) => {\n return {\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: data.id,\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n };\n }) satisfies Record<string, any>[];\n\n // add order value\n if (cleanRelationData.set && hasOrderColumn(attribute)) {\n insert.forEach((data: Record<string, unknown>, idx) => {\n data[orderColumnName] = idx + 1;\n });\n } else if (cleanRelationData.connect && hasOrderColumn(attribute)) {\n // use position attributes to calculate order\n const orderMap = relationsOrderer(\n [],\n inverseJoinColumn.name,\n joinTable.orderColumnName,\n true // Always make an strict connect when inserting\n )\n .connect(relsToAdd)\n .get()\n // set the order based on the order of the ids\n .reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx }), {} as Record<ID, number>);\n\n insert.forEach((row: Record<string, unknown>) => {\n row[orderColumnName] = orderMap[row[inverseJoinColumn.name] as number];\n });\n }\n\n // add inv_order value\n if (hasInverseOrderColumn(attribute)) {\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, relIdsToadd)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {} as Record<string, number>\n );\n\n insert.forEach((rel) => {\n rel[inverseOrderColumnName] = (maxMap[rel[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n if (insert.length === 0) {\n continue;\n }\n\n // insert new relations\n await batchInsertJoinTable(db, joinTable.name, insert, trx);\n }\n }\n },\n\n /**\n * Updates relations of an existing entity\n */\n // TODO: check relation exists (handled by FKs except for polymorphics)\n async updateRelations(uid, id, data, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (attribute.type !== 'relation' || !has(attributeName, data)) {\n continue;\n }\n const cleanRelationData = toAssocs(data[attributeName]);\n\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n // update instead of deleting because the relation is directly on the entity table\n // and not in a join table\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: null, [typeColumn.name]: null })\n .where({ [idColumn.name]: id, [typeColumn.name]: uid })\n .transacting(trx)\n .execute();\n\n if (!isNull(cleanRelationData.set)) {\n const relId = toIds(cleanRelationData.set?.[0]);\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: id, [typeColumn.name]: uid })\n .where({ id: relId })\n .transacting(trx)\n .execute();\n }\n } else if (\n targetAttribute.type === 'relation' &&\n targetAttribute.relation === 'morphToMany'\n ) {\n const { joinTable } = targetAttribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const hasSet = !isEmpty(cleanRelationData.set);\n const hasConnect = !isEmpty(cleanRelationData.connect);\n const hasDisconnect = !isEmpty(cleanRelationData.disconnect);\n\n // for connect/disconnect without a set, only modify those relations\n if (!hasSet && (hasConnect || hasDisconnect)) {\n // delete disconnects and connects (to prevent duplicates when we add them later)\n const idsToDelete = [\n ...(cleanRelationData.disconnect || []),\n ...(cleanRelationData.connect || []),\n ];\n\n if (!isEmpty(idsToDelete)) {\n const where = {\n $or: idsToDelete.map((item: any) => {\n return {\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n [joinColumn.name]: item.id,\n ...(joinTable.on || {}),\n field: attributeName,\n };\n }),\n };\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where(where)\n .transacting(trx)\n .execute();\n }\n\n // connect relations\n if (hasConnect) {\n // Query database to find the order of the last relation\n const start = await this.createQueryBuilder(joinTable.name)\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n })\n .max('order')\n .first()\n .transacting(trx)\n .execute();\n\n const startOrder = (start as any)?.max || 0;\n\n const rows = (cleanRelationData.connect ?? []).map((data, idx) => ({\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: startOrder + idx + 1,\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n }\n\n continue;\n }\n\n // delete all relations\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n field: attributeName,\n })\n .transacting(trx)\n .execute();\n\n if (hasSet) {\n const rows = (cleanRelationData.set ?? []).map((data, idx) => ({\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n }\n }\n\n continue;\n }\n\n if (attribute.relation === 'morphToOne') {\n // handled on the entry itself\n continue;\n }\n\n if (attribute.relation === 'morphToMany') {\n const { joinTable } = attribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n const hasSet = !isEmpty(cleanRelationData.set);\n const hasConnect = !isEmpty(cleanRelationData.connect);\n const hasDisconnect = !isEmpty(cleanRelationData.disconnect);\n\n // for connect/disconnect without a set, only modify those relations\n if (!hasSet && (hasConnect || hasDisconnect)) {\n // delete disconnects and connects (to prevent duplicates when we add them later)\n const idsToDelete = [\n ...(cleanRelationData.disconnect || []),\n ...(cleanRelationData.connect || []),\n ];\n\n const rowsToDelete = [\n ...(cleanRelationData.disconnect ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })),\n ...(cleanRelationData.connect ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n // @ts-expect-error TODO\n [typeColumn.name]: data[typeField],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })),\n ];\n\n const adjacentRelations = await this.createQueryBuilder(joinTable.name)\n .where({\n $or: [\n {\n [joinColumn.name]: id,\n [idColumn.name]: {\n $in: compact(\n cleanRelationData.connect?.map(\n (r) => r.position?.after || r.position?.before\n )\n ),\n },\n },\n {\n [joinColumn.name]: id,\n order: this.createQueryBuilder(joinTable.name)\n .max('order')\n .where({ [joinColumn.name]: id })\n .where(joinTable.on || {})\n .transacting(trx)\n .getKnexQuery(),\n },\n ],\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, any>>>();\n\n if (!isEmpty(idsToDelete)) {\n const where = {\n $or: idsToDelete.map((item: any) => {\n return {\n [idColumn.name]: item.id,\n [typeColumn.name]: item[typeField],\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n };\n }),\n };\n\n // delete previous relations\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where(where)\n .transacting(trx)\n .execute();\n\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rowsToDelete as any, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n }\n\n // connect relations\n if (hasConnect) {\n const dataset = cleanRelationData.connect || [];\n\n const rows = dataset.map((data) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField as '__type'],\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n const orderMap = relationsOrderer(\n // Merge id & __type to get a single id key\n adjacentRelations.map(\n encodePolymorphicRelation({\n idColumn: idColumn.name,\n typeColumn: typeColumn.name,\n })\n ),\n idColumn.name,\n 'order',\n cleanRelationData.options?.strict\n )\n .connect(\n // Merge id & __type to get a single id key\n dataset.map(encodePolymorphicRelation({ idColumn: 'id', typeColumn: '__type' }))\n )\n .getOrderMap();\n\n rows.forEach((row: Record<string, unknown>) => {\n const rowId = row[idColumn.name] as number;\n const rowType = row[typeColumn.name] as string;\n const encodedId = encodePolymorphicId(rowId, rowType);\n\n row.order = orderMap[encodedId];\n });\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n }\n\n continue;\n }\n\n if (hasSet) {\n // delete all relations for this entity\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n })\n .transacting(trx)\n .execute();\n\n const rows = (cleanRelationData.set ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField],\n field: attributeName,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })) satisfies Record<string, any>[];\n\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n\n await batchInsertJoinTable(db, joinTable.name, rows, trx);\n }\n\n continue;\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n // handled in the row itself\n continue;\n }\n\n // oneToOne oneToMany on the non owning side.\n // Since it is a join column no need to remove previous relations\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n\n if (!isNull(cleanRelationData.set)) {\n const relIdsToAdd = toIds(cleanRelationData.set);\n await this.createQueryBuilder(target)\n .where({ id: relIdsToAdd })\n .update({ [attribute.joinColumn.referencedColumn]: id })\n .transacting(trx)\n .execute();\n }\n }\n\n if (attribute.joinTable) {\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } =\n joinTable;\n const select = [joinColumn.name, inverseJoinColumn.name];\n if (hasOrderColumn(attribute)) {\n select.push(orderColumnName);\n }\n if (hasInverseOrderColumn(attribute)) {\n select.push(inverseOrderColumnName);\n }\n\n // only delete relations\n if (isNull(cleanRelationData.set)) {\n await deleteRelations({ id, attribute, db, relIdsToDelete: 'all', transaction: trx });\n } else {\n const isPartialUpdate = !has('set', cleanRelationData);\n let relIdsToaddOrMove: ID[];\n\n if (isPartialUpdate) {\n if (isAnyToOne(attribute)) {\n // TODO: V5 find a fix to connect multiple versions of a document at the same time on xToOne relations\n // cleanRelationData.connect = cleanRelationData.connect?.slice(-1);\n }\n relIdsToaddOrMove = toIds(cleanRelationData.connect);\n const relIdsToDelete = toIds(\n differenceWith(\n isEqual,\n cleanRelationData.disconnect,\n cleanRelationData.connect ?? []\n )\n );\n\n if (!isEmpty(relIdsToDelete)) {\n await deleteRelations({ id, attribute, db, relIdsToDelete, transaction: trx });\n }\n\n if (isEmpty(cleanRelationData.connect)) {\n continue;\n }\n\n // Fetch current relations to handle ordering\n let currentMovingRels: Record<string, ID>[] = [];\n\n if (hasOrderColumn(attribute) || hasInverseOrderColumn(attribute)) {\n currentMovingRels = await this.createQueryBuilder(joinTable.name)\n .select(select)\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToaddOrMove },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute();\n }\n\n // prepare relations to insert\n const insert = uniqBy('id', cleanRelationData.connect).map((relToAdd) => ({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: relToAdd.id,\n ...(joinTable.on || {}),\n ...(relToAdd.__pivot || {}),\n }));\n\n if (hasOrderColumn(attribute)) {\n // Get all adjacent relations and the one with the highest order\n const adjacentRelations = await this.createQueryBuilder(joinTable.name)\n .where({\n $or: [\n {\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: {\n $in: compact(\n cleanRelationData.connect?.map(\n (r) => r.position?.after || r.position?.before\n )\n ),\n },\n },\n {\n [joinColumn.name]: id,\n [orderColumnName]: this.createQueryBuilder(joinTable.name)\n .max(orderColumnName)\n .where({ [joinColumn.name]: id })\n .where(joinTable.on || {})\n .transacting(trx)\n .getKnexQuery(),\n },\n ],\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, any>>>();\n\n const orderMap = relationsOrderer(\n adjacentRelations,\n inverseJoinColumn.name,\n joinTable.orderColumnName,\n cleanRelationData.options?.strict\n )\n .connect(cleanRelationData.connect ?? [])\n .getOrderMap();\n\n insert.forEach((row) => {\n row[orderColumnName] = orderMap[row[inverseJoinColumn.name]];\n });\n }\n\n // add inv order value\n if (hasInverseOrderColumn(attribute)) {\n const nonExistingRelsIds: ID[] = difference(\n relIdsToaddOrMove,\n map(inverseJoinColumn.name, currentMovingRels)\n );\n\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, nonExistingRelsIds)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {}\n );\n\n insert.forEach((row) => {\n row[inverseOrderColumnName] = (maxMap[row[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n // insert rows\n await batchInsertJoinTable(db, joinTable.name, insert, trx, {\n onConflict: joinTable.pivotColumns,\n merge: hasOrderColumn(attribute) ? [orderColumnName] : undefined,\n ignore: !hasOrderColumn(attribute),\n });\n\n // remove gap between orders\n await cleanOrderColumns({ attribute, db, id, transaction: trx });\n } else {\n // Keep every row. The payload was already collapsed to a\n // single related entry upstream; what's left here may still\n // be two rows for the same entry (its draft and published\n // sides) and both need to be linked, otherwise the entry\n // vanishes from the Edit View on save.\n\n // overwrite all relations\n relIdsToaddOrMove = toIds(cleanRelationData.set);\n await deleteRelations({\n id,\n attribute,\n db,\n relIdsToDelete: 'all',\n relIdsToNotDelete: relIdsToaddOrMove,\n transaction: trx,\n });\n\n if (isEmpty(cleanRelationData.set)) {\n continue;\n }\n\n const insert = uniqBy('id', cleanRelationData.set).map((relToAdd) => ({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: relToAdd.id,\n ...(joinTable.on || {}),\n ...(relToAdd.__pivot || {}),\n }));\n\n // add order value\n if (hasOrderColumn(attribute)) {\n insert.forEach((row, idx) => {\n row[orderColumnName] = idx + 1;\n });\n }\n\n // add inv order value\n if (hasInverseOrderColumn(attribute)) {\n const existingRels = await this.createQueryBuilder(joinTable.name)\n .select(inverseJoinColumn.name)\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToaddOrMove },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, ID>>>();\n\n const inverseRelsIds = map(inverseJoinColumn.name, existingRels);\n\n const nonExistingRelsIds = difference(relIdsToaddOrMove, inverseRelsIds);\n\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, nonExistingRelsIds)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {}\n );\n\n insert.forEach((row: any) => {\n row[inverseOrderColumnName] = (maxMap[row[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n // insert rows\n await batchInsertJoinTable(db, joinTable.name, insert, trx, {\n onConflict: joinTable.pivotColumns,\n merge: hasOrderColumn(attribute) ? [orderColumnName] : undefined,\n ignore: !hasOrderColumn(attribute),\n });\n }\n\n // Delete the previous relations for oneToAny relations\n if (isBidirectional(attribute) && isOneToAny(attribute)) {\n await deletePreviousOneToAnyRelations({\n id,\n attribute,\n relIdsToadd: relIdsToaddOrMove,\n db,\n transaction: trx,\n });\n }\n\n // Delete the previous relations for anyToOne relations\n if (isAnyToOne(attribute)) {\n await deletePreviousAnyToOneRelations({\n id,\n attribute,\n relIdToadd: relIdsToaddOrMove[0],\n db,\n transaction: trx,\n });\n }\n }\n }\n }\n },\n\n /**\n * Delete relational associations of an existing entity\n * This removes associations but doesn't do cascade deletions for components for example. This will be handled on the entity service layer instead\n * NOTE: Most of the deletion should be handled by ON DELETE CASCADE for dialects that have FKs\n *\n * @param {EntityManager} em - entity manager instance\n * @param {Metadata} metadata - model metadta\n * @param {ID} id - entity ID\n */\n async deleteRelations(uid, id, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n continue;\n }\n\n /*\n if morphOne | morphMany\n if morphBy is morphToOne\n set null\n if morphBy is morphToOne\n delete links\n */\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: null, [typeColumn.name]: null })\n .where({ [idColumn.name]: id, [typeColumn.name]: uid })\n .transacting(trx)\n .execute();\n } else if (\n targetAttribute.type === 'relation' &&\n targetAttribute.relation === 'morphToMany'\n ) {\n const { joinTable } = targetAttribute;\n const { morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n field: attributeName,\n })\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n /*\n if morphToOne\n nothing to do\n */\n if (attribute.relation === 'morphToOne') {\n // do nothing\n }\n\n /*\n if morphToMany\n delete links\n */\n if (attribute.relation === 'morphToMany') {\n const { joinTable } = attribute;\n const { joinColumn } = joinTable;\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n })\n .transacting(trx)\n .execute();\n\n continue;\n }\n\n // do not need to delete links when using foreign keys\n if (db.dialect.usesForeignKeys()) {\n continue;\n }\n\n // NOTE: we do not remove existing associations with the target as it should handled by unique FKs instead\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n // nothing to do => relation already added on the table\n continue;\n }\n\n // oneToOne oneToMany on the non owning side.\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n await deleteRelations({ id, attribute, db, relIdsToDelete: 'all', transaction: trx });\n }\n }\n },\n\n // TODO: add lifecycle events\n async populate(uid, entity, populate) {\n const entry = await this.findOne(uid, {\n select: ['id'],\n where: { id: entity.id },\n populate,\n });\n\n return { ...entity, ...entry };\n },\n\n // TODO: add lifecycle events\n async load(uid, entity, fields, populate) {\n const { attributes } = db.metadata.get(uid);\n\n const fieldsArr = castArray(fields);\n fieldsArr.forEach((field) => {\n const attribute = attributes[field];\n\n if (!attribute || attribute.type !== 'relation') {\n throw new Error(`Invalid load. Expected ${field} to be a relational attribute`);\n }\n });\n\n const entry = await this.findOne(uid, {\n select: ['id'],\n where: { id: entity.id },\n populate: fieldsArr.reduce(\n (acc, field) => {\n acc[field] = populate || true;\n return acc;\n },\n {} as Record<string, unknown>\n ),\n });\n\n if (!entry) {\n return null;\n }\n\n if (Array.isArray(fields)) {\n return pick(fields, entry);\n }\n\n return entry[fields];\n },\n\n // cascading\n // aggregations\n // -> avg\n // -> min\n // -> max\n // -> grouping\n\n // formulas\n // custom queries\n\n // utilities\n // -> map result\n // -> map input\n\n // extra features\n // -> virtuals\n // -> private\n\n /**\n * Insert join-table rows in batches (GH#25198).\n * Uses dialect.getBatchInsertSize() so SQLite etc. can enforce a safe batch size.\n * All batches run in the same transaction; caller must pass an active transaction.\n */\n async insertJoinTableRows(\n joinTableName: string,\n rows: Record<string, unknown>[],\n trx: any,\n options?: { onConflict?: string[]; merge?: string[]; ignore?: boolean }\n ) {\n if (rows.length === 0) return;\n if (trx == null) {\n throw new Error(\n 'insertJoinTableRows requires a transaction so all batches commit or roll back atomically'\n );\n }\n const batchSize = db.dialect.getBatchInsertSize();\n for (let i = 0; i < rows.length; i += batchSize) {\n const chunk = rows.slice(i, i + batchSize);\n let qb = this.createQueryBuilder(joinTableName).insert(chunk).transacting(trx);\n if (options?.onConflict) {\n qb = qb.onConflict(options.onConflict);\n if (options.merge) qb.merge(options.merge);\n else if (options.ignore) qb.ignore();\n }\n await qb.execute();\n }\n },\n\n createQueryBuilder(uid) {\n return createQueryBuilder(uid, db);\n },\n\n getRepository(uid) {\n if (!repoMap[uid]) {\n repoMap[uid] = createRepository(uid, db);\n }\n\n return repoMap[uid];\n },\n };\n};\n"],"names":["batchInsertJoinTable","db","joinTableName","rows","trx","options","length","Error","batchSize","dialect","getBatchInsertSize","i","chunk","slice","qb","createQueryBuilder","insert","transacting","onConflict","merge","ignore","execute","isRecord","value","isObject","isNil","toId","isValidId","id","JSON","stringify","toIds","castArray","map","isString","isInteger","isValidObjectId","toIdArray","data","array","filter","datum","__pivot","uniqWith","isEqual","toAssocs","isArray","isNumber","isNull","set","strict","connect","elm","position","end","__type","disconnect","processData","metadata","withDefaults","attributes","obj","attributeName","Object","keys","attribute","types","field","createField","isUndefined","default","validate","val","toDB","joinColumn","owner","joinColumnName","name","attrValue","Array","setIds","strapi","log","warn","morphColumn","idColumn","typeColumn","typeField","assign","has","createEntityManager","repoMap","findOne","uid","params","states","lifecycles","run","result","init","first","findMany","count","res","pick","Number","create","get","isPlainObject","dataToInsert","transaction","attachRelations","commit","e","rollback","where","delete","select","populate","filters","createMany","isEmpty","createdEntries","chunkResult","concat","ids","entry","update","entity","mapResults","dataToUpdate","updateRelations","updateMany","updatedRows","deleteRelations","deleteMany","deletedRows","isValidLink","type","cleanRelationData","relation","target","morphBy","targetAttribute","relId","joinTable","idx","on","order","dataset","orderMap","relationsOrderer","encodePolymorphicRelation","reduce","acc","rel","forEach","row","rowId","rowType","encodedId","encodePolymorphicId","deleteRelatedMorphOneRelationsAfterMorphToManyUpdate","relIdsToAdd","isBidirectional","$ne","referencedColumn","inverseJoinColumn","orderColumnName","inverseOrderColumnName","relsToAdd","relIdsToadd","isOneToAny","deletePreviousOneToAnyRelations","uniqBy","hasOrderColumn","hasInverseOrderColumn","maxResults","getConnection","max","as","whereIn","groupBy","from","maxMap","hasSet","hasConnect","hasDisconnect","idsToDelete","$or","item","start","startOrder","rowsToDelete","adjacentRelations","$in","compact","r","after","before","getKnexQuery","getOrderMap","push","relIdsToDelete","isPartialUpdate","relIdsToaddOrMove","isAnyToOne","differenceWith","currentMovingRels","relToAdd","nonExistingRelsIds","difference","pivotColumns","undefined","cleanOrderColumns","relIdsToNotDelete","existingRels","inverseRelsIds","deletePreviousAnyToOneRelations","relIdToadd","usesForeignKeys","load","fields","fieldsArr","insertJoinTableRows","getRepository","createRepository"],"mappings":"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"}
|
|
@@ -114,7 +114,17 @@ 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
|
-
|
|
117
|
+
let attrValue = !isUndefined(data[attributeName]) ? data[attributeName] : data[joinColumnName];
|
|
118
|
+
// Legacy single-column storage: only one id fits. Take the last
|
|
119
|
+
// and warn — modern schemas use a join table that can hold both
|
|
120
|
+
// the draft and published rows of the related entry.
|
|
121
|
+
if (isObject(attrValue) && !Array.isArray(attrValue) && 'set' in attrValue && Array.isArray(attrValue.set)) {
|
|
122
|
+
const setIds = attrValue.set;
|
|
123
|
+
if (setIds.length > 1) {
|
|
124
|
+
strapi?.log?.warn?.(`Multiple ids provided for xToOne relation "${attributeName}" stored in a single FK column; keeping only the last id. Consider using a join table (useJoinTable: true) to support multiple versions of a Draft-and-Publish target.`);
|
|
125
|
+
}
|
|
126
|
+
attrValue = setIds.length > 0 ? setIds[setIds.length - 1] : null;
|
|
127
|
+
}
|
|
118
128
|
if (isNull(attrValue)) {
|
|
119
129
|
obj[joinColumnName] = attrValue;
|
|
120
130
|
} else if (!isUndefined(attrValue)) {
|
|
@@ -966,9 +976,11 @@ const createEntityManager = (db)=>{
|
|
|
966
976
|
transaction: trx
|
|
967
977
|
});
|
|
968
978
|
} else {
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
979
|
+
// Keep every row. The payload was already collapsed to a
|
|
980
|
+
// single related entry upstream; what's left here may still
|
|
981
|
+
// be two rows for the same entry (its draft and published
|
|
982
|
+
// sides) and both need to be linked, otherwise the entry
|
|
983
|
+
// vanishes from the Edit View on save.
|
|
972
984
|
// overwrite all relations
|
|
973
985
|
relIdsToaddOrMove = toIds(cleanRelationData.set);
|
|
974
986
|
await deleteRelations({
|