Skip to content

Commit

Permalink
fix: avoid n+1 queries
Browse files Browse the repository at this point in the history
Signed-off-by: Cleopatra Enjeck M <[email protected]>
  • Loading branch information
enjeck committed Aug 27, 2024
1 parent 5861220 commit 86be589
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 12 deletions.
7 changes: 3 additions & 4 deletions lib/Db/ContextNodeRelationMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions lib/Db/PageContentMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
9 changes: 4 additions & 5 deletions lib/Service/ContextService.php
Original file line number Diff line number Diff line change
Expand Up @@ -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]);
}
Expand Down

0 comments on commit 86be589

Please sign in to comment.