diff --git a/lib/Db/ContextNodeRelationMapper.php b/lib/Db/ContextNodeRelationMapper.php index ad5bdf603..be1944564 100644 --- a/lib/Db/ContextNodeRelationMapper.php +++ b/lib/Db/ContextNodeRelationMapper.php @@ -44,14 +44,13 @@ public function getRelIdsForNode(int $nodeId, int $nodeType): array { return $nodeRelIds; } - public function deleteByNodeRelId(int $nodeRelId): int { + public function deleteByNodeRelIds(array $nodeRelIds): void { $qb = $this->db->getQueryBuilder(); $qb->delete($this->table) - ->where($qb->expr()->eq('id', $qb->createNamedParameter($nodeRelId, IQueryBuilder::PARAM_INT))); - return $qb->executeStatement(); + ->where($qb->expr()->in('id', $qb->createNamedParameter($nodeRelIds, IQueryBuilder::PARAM_INT_ARRAY), ':nodeRelIds')); + $qb->executeStatement(); } - /** * @throws MultipleObjectsReturnedException * @throws DoesNotExistException diff --git a/lib/Db/PageContentMapper.php b/lib/Db/PageContentMapper.php index 36d62cd50..cfd51475d 100644 --- a/lib/Db/PageContentMapper.php +++ b/lib/Db/PageContentMapper.php @@ -73,10 +73,10 @@ public function deleteByPageId(int $pageId): int { return $qb->executeStatement(); } - public function deleteByNodeRelId(int $nodeRelId): int { + public function deleteByNodeRelIds(array $nodeRelIds): void { $qb = $this->db->getQueryBuilder(); $qb->delete($this->table) - ->where($qb->expr()->eq('node_rel_id', $qb->createNamedParameter($nodeRelId, IQueryBuilder::PARAM_INT))); - return $qb->executeStatement(); + ->where($qb->expr()->in('node_rel_id', $qb->createNamedParameter($nodeRelIds, IQueryBuilder::PARAM_INT_ARRAY), ':nodeRelIds')); + $qb->executeStatement(); } } diff --git a/lib/Service/ContextService.php b/lib/Service/ContextService.php index f427e8271..41f7eaac0 100644 --- a/lib/Service/ContextService.php +++ b/lib/Service/ContextService.php @@ -264,11 +264,10 @@ public function delete(int $contextId, string $userId): Context { public function deleteNodeRel(int $nodeId, int $nodeType): void { try { $nodeRelIds = $this->contextNodeRelMapper->getRelIdsForNode($nodeId, $nodeType); - foreach ($nodeRelIds as $nodeRelId) { - $this->pageContentMapper->deleteByNodeRelId($nodeRelId); - $this->contextNodeRelMapper->deleteByNodeRelId($nodeRelId); - } - + $this->atomic(function () use ($nodeRelIds) { + $this->pageContentMapper->deleteByNodeRelIds($nodeRelIds); + $this->contextNodeRelMapper->deleteByNodeRelIds($nodeRelIds); + }, $this->dbc); } catch (Exception $e) { $this->logger->error('Something went wrong while deleting node relation for node id: ' . (string)$nodeId . ' and node type ' . (string)$nodeType, ['exception' => $e]); }