summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLouis <louis@chmn.me>2024-06-25 14:06:45 +0200
committerGitHub <noreply@github.com>2024-06-25 14:06:45 +0200
commita0dc778e1431572cec8d64c33b97c267d62b1bfa (patch)
tree4ac9dd487c3a74a4440958c6515ea7822274b537 /lib
parent465ad2f4ec42b45b119b12b8fbab8db006a4f0f8 (diff)
parentc47432fe49635c4b7aff193735937733c7e199a1 (diff)
downloadnextcloud-server-a0dc778e1431572cec8d64c33b97c267d62b1bfa.tar.gz
nextcloud-server-a0dc778e1431572cec8d64c33b97c267d62b1bfa.zip
Merge pull request #45995 from nextcloud/backport/45580/stable29
[stable29] fix: avoid duplicate tag inserts by checking if the mapping exists already in db
Diffstat (limited to 'lib')
-rw-r--r--lib/private/SystemTag/SystemTagObjectMapper.php22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/private/SystemTag/SystemTagObjectMapper.php b/lib/private/SystemTag/SystemTagObjectMapper.php
index 614d0274add..7a2e701515d 100644
--- a/lib/private/SystemTag/SystemTagObjectMapper.php
+++ b/lib/private/SystemTag/SystemTagObjectMapper.php
@@ -133,6 +133,27 @@ class SystemTagObjectMapper implements ISystemTagObjectMapper {
}
$this->assertTagsExist($tagIds);
+ $this->connection->beginTransaction();
+
+ $query = $this->connection->getQueryBuilder();
+ $query->select('systemtagid')
+ ->from(self::RELATION_TABLE)
+ ->where($query->expr()->in('systemtagid', $query->createNamedParameter($tagIds, IQueryBuilder::PARAM_INT_ARRAY)))
+ ->andWhere($query->expr()->eq('objecttype', $query->createNamedParameter($objectType)))
+ ->andWhere($query->expr()->eq('objectid', $query->createNamedParameter($objId)));
+ $result = $query->executeQuery();
+ $rows = $result->fetchAll();
+ $existingTags = [];
+ foreach ($rows as $row) {
+ $existingTags[] = $row['systemtagid'];
+ }
+ //filter only tags that do not exist in db
+ $tagIds = array_diff($tagIds, $existingTags);
+ if (empty($tagIds)) {
+ // no tags to insert so return here
+ $this->connection->commit();
+ return;
+ }
$query = $this->connection->getQueryBuilder();
$query->insert(self::RELATION_TABLE)
@@ -153,6 +174,7 @@ class SystemTagObjectMapper implements ISystemTagObjectMapper {
}
}
+ $this->connection->commit();
if (empty($tagsAssigned)) {
return;
}