(
kysely: AnyKysely,
model: string,
where: any,
data: any,
limit: number | undefined,
returnData: ReturnData,
filterModel?: string,
fromRelation?: FromRelationContext,
fieldsToReturn?: readonly string[],
)
| 1551 | } |
| 1552 | |
| 1553 | protected async updateMany< |
| 1554 | ReturnData extends boolean, |
| 1555 | Result = ReturnData extends true ? unknown[] : { count: number }, |
| 1556 | >( |
| 1557 | kysely: AnyKysely, |
| 1558 | model: string, |
| 1559 | where: any, |
| 1560 | data: any, |
| 1561 | limit: number | undefined, |
| 1562 | returnData: ReturnData, |
| 1563 | filterModel?: string, |
| 1564 | fromRelation?: FromRelationContext, |
| 1565 | fieldsToReturn?: readonly string[], |
| 1566 | ): Promise<Result> { |
| 1567 | if (typeof data !== 'object') { |
| 1568 | throw createInvalidInputError('data must be an object'); |
| 1569 | } |
| 1570 | |
| 1571 | if (Object.keys(data).length === 0) { |
| 1572 | return (returnData ? [] : { count: 0 }) as Result; |
| 1573 | } |
| 1574 | |
| 1575 | const modelDef = this.requireModel(model); |
| 1576 | if (modelDef.baseModel && limit !== undefined) { |
| 1577 | throw createNotSupportedError('Updating with a limit is not supported for polymorphic models'); |
| 1578 | } |
| 1579 | |
| 1580 | const parentWhere = await this.buildUpdateParentRelationFilter(kysely, fromRelation); |
| 1581 | let combinedWhere: WhereInput<Schema, GetModels<Schema>, any, false> = where ?? true; |
| 1582 | if (Object.keys(parentWhere).length > 0) { |
| 1583 | combinedWhere = Object.keys(combinedWhere).length > 0 ? { AND: [parentWhere, combinedWhere] } : parentWhere; |
| 1584 | } |
| 1585 | |
| 1586 | filterModel ??= model; |
| 1587 | let updateFields: any = {}; |
| 1588 | |
| 1589 | for (const field in data) { |
| 1590 | if (isRelationField(this.schema, model, field)) { |
| 1591 | continue; |
| 1592 | } |
| 1593 | updateFields[field] = this.processScalarFieldUpdateData(model, field, data); |
| 1594 | } |
| 1595 | |
| 1596 | let resultFromBaseModel: any = undefined; |
| 1597 | if (modelDef.baseModel) { |
| 1598 | const baseResult = await this.processBaseModelUpdateMany( |
| 1599 | kysely, |
| 1600 | modelDef.baseModel, |
| 1601 | combinedWhere, |
| 1602 | updateFields, |
| 1603 | filterModel, |
| 1604 | ); |
| 1605 | updateFields = baseResult.remainingFields; |
| 1606 | resultFromBaseModel = baseResult.baseResult; |
| 1607 | } |
| 1608 | |
| 1609 | // check again if we don't have anything to update for this model |
| 1610 | if (Object.keys(updateFields).length === 0) { |
nothing calls this directly
no test coverage detected