From 157be42a83e7c43464462b7e8cbf0b2bb9a251ab Mon Sep 17 00:00:00 2001 From: Louis Chemineau Date: Fri, 5 May 2023 12:57:55 +0200 Subject: [PATCH] Prevent error on files scan if metadata exists Signed-off-by: Louis Chemineau --- lib/private/Metadata/FileMetadataMapper.php | 30 +++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/private/Metadata/FileMetadataMapper.php b/lib/private/Metadata/FileMetadataMapper.php index 594ac5eafba..003ab13126e 100644 --- a/lib/private/Metadata/FileMetadataMapper.php +++ b/lib/private/Metadata/FileMetadataMapper.php @@ -60,7 +60,7 @@ class FileMetadataMapper extends QBMapper { $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from($this->getTableName()) - ->where($qb->expr()->eq('id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT_ARRAY))) + ->where($qb->expr()->eq('id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT))) ->andWhere($qb->expr()->eq('group_name', $qb->createNamedParameter($groupName, IQueryBuilder::PARAM_STR))); return $this->findEntity($qb); @@ -111,7 +111,7 @@ class FileMetadataMapper extends QBMapper { /** * Updates an entry in the db from an entity * - * @param Entity $entity the entity that should be created + * @param FileMetadata $entity the entity that should be created * @return FileMetadata the saved entity with the set id * @throws Exception * @throws \InvalidArgumentException if entity has no id @@ -148,4 +148,30 @@ class FileMetadataMapper extends QBMapper { return $entity; } + + /** + * Override the insertOrUpdate as we could be in a transaction in which case we can not afford on error. + * + * @param FileMetadata $entity the entity that should be created/updated + * @return FileMetadata the saved entity with the (new) id + * @throws Exception + * @throws \InvalidArgumentException if entity has no id + */ + public function insertOrUpdate(Entity $entity): FileMetadata { + try { + $existingEntity = $this->findForGroupForFile($entity->getId(), $entity->getGroupName()); + } catch (\Throwable) { + $existingEntity = null; + } + + if ($existingEntity !== null) { + if ($entity->getValue() !== $existingEntity->getValue()) { + return $this->update($entity); + } else { + return $existingEntity; + } + } else { + return parent::insertOrUpdate($entity); + } + } } -- 2.39.5