Skip to content

Commit b082652

Browse files
committed
perf(setChildrenOrder): Use transactions
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
1 parent 4e55230 commit b082652

1 file changed

Lines changed: 18 additions & 7 deletions

File tree

lib/Db/TreeMapper.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -827,25 +827,36 @@ public function setChildrenOrder(int $folderId, array $newChildrenOrder): void {
827827
return $dict;
828828
}, []);
829829

830+
$qb = $this->db->getQueryBuilder();
831+
$qb
832+
->update('bookmarks_tree')
833+
->set('index', $qb->createParameter('index'))
834+
->where($qb->expr()->eq('id', $qb->createParameter('id')))
835+
->andWhere($qb->expr()->eq('parent_folder', $qb->createParameter('parent_folder')))
836+
->andWhere($qb->expr()->eq('type', $qb->createParameter('type')));
837+
$this->db->beginTransaction();
830838
foreach ($newChildrenOrder as $i => $child) {
831839
if (!in_array($child['type'], [TreeMapper::TYPE_FOLDER, TreeMapper::TYPE_BOOKMARK], true)) {
832840
continue;
833841
}
834842

843+
if ($i % 1000 === 0) {
844+
$this->db->commit();
845+
$this->db->beginTransaction();
846+
}
847+
835848
if (($child['type'] === TreeMapper::TYPE_FOLDER) && isset($foldersToShares[$child['id']])) {
836849
$child['type'] = TreeMapper::TYPE_SHARE;
837850
$child['id'] = $foldersToShares[$child['id']];
838851
}
839852

840-
$qb = $this->db->getQueryBuilder();
841-
$qb
842-
->update('bookmarks_tree')
843-
->set('index', $qb->createPositionalParameter($i))
844-
->where($qb->expr()->eq('id', $qb->createPositionalParameter($child['id'])))
845-
->andWhere($qb->expr()->eq('parent_folder', $qb->createPositionalParameter($folderId)))
846-
->andWhere($qb->expr()->eq('type', $qb->createPositionalParameter($child['type'])));
853+
$qb->setParameter('index', $i, IQueryBuilder::PARAM_INT);
854+
$qb->setParameter('id', $child['id'], IQueryBuilder::PARAM_INT);
855+
$qb->setParameter('parent_folder', $folderId);
856+
$qb->setParameter('type', $child['type']);
847857
$qb->executeStatement();
848858
}
859+
$this->db->commit();
849860

850861
$this->eventDispatcher->dispatch(UpdateEvent::class, new UpdateEvent(TreeMapper::TYPE_FOLDER, $folderId));
851862
}

0 commit comments

Comments
 (0)