From dc2cce6aca72c0d779947ecf69b4e238cfd976ff Mon Sep 17 00:00:00 2001 From: ntapsrigowri <47638406+ntapsrigowri@users.noreply.github.com> Date: Fri, 3 Oct 2025 15:10:46 -0700 Subject: [PATCH] Update find.ts fix: support composite foreign keys in cascade delete operations - Fixed getFieldFromRelationshipWhere to iterate over all FK columns - Fixed getFieldRelationshipWhere to handle all composite key columns - Fixed getFieldToRelationshipWhere for completeness - Previously only the first column was checked, causing over-broad cascades - Now all columns in relationFromFields/relationToFields are used - Prevents unintended deletion of child rows with matching first FK column Fixes composite foreign key cascade behavior to match real database operations --- src/lib/operations/find/find.ts | 44 ++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/src/lib/operations/find/find.ts b/src/lib/operations/find/find.ts index 3ecde1e5..ce7b0500 100755 --- a/src/lib/operations/find/find.ts +++ b/src/lib/operations/find/find.ts @@ -229,25 +229,45 @@ export const getFieldRelationshipWhere = ( ): Record => { if (field.relationToFields?.length === 0) { field = getJoinField(field, delegates)!; - return { - [field.relationFromFields![0]]: item[field.relationToFields![0]] as GroupByFieldArg, - }; + if (!field.relationFromFields || !field.relationToFields) return {}; + const result: Record = {}; + for (let i = 0; i < field.relationFromFields.length; i++) { + const from = field.relationFromFields[i]; + const to = field.relationToFields[i]; + result[from] = item[to] as GroupByFieldArg; + } + return result; } - return { - [field.relationToFields![0]]: item[field.relationFromFields![0]] as GroupByFieldArg, - }; + if (!field.relationToFields || !field.relationFromFields) return {}; + const result: Record = {}; + for (let i = 0; i < field.relationToFields.length; i++) { + const to = field.relationToFields[i]; + const from = field.relationFromFields[i]; + result[to] = item[from] as GroupByFieldArg; + } + return result; }; export const getFieldFromRelationshipWhere = (item: Item, field: DMMF.Field) => { - return { - [field.relationFromFields![0]]: item[field.relationToFields![0]] as GroupByFieldArg, - }; + if (!field.relationFromFields || !field.relationToFields) return {}; + const result: Record = {}; + for (let i = 0; i < field.relationFromFields.length; i++) { + const from = field.relationFromFields[i]; + const to = field.relationToFields[i]; + result[from] = item[to] as GroupByFieldArg; + } + return result; }; export const getFieldToRelationshipWhere = (item: Item, field: DMMF.Field) => { - return { - [field.relationToFields![0]]: item[field.relationFromFields![0]] as GroupByFieldArg, - }; + if (!field.relationToFields || !field.relationFromFields) return {}; + const result: Record = {}; + for (let i = 0; i < field.relationToFields.length; i++) { + const to = field.relationToFields[i]; + const from = field.relationFromFields[i]; + result[to] = item[from] as GroupByFieldArg; + } + return result; }; function connect(args: FindArgs, current: Delegate, delegates: Delegates) {