From c4bebf66d46a1d9e42b2a50ec08af97b7cb5aec9 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 30 Nov 2015 10:20:00 +0100 Subject: [PATCH] Do not count the entries when we only need to know if it is at least one --- .../systemtag/systemtagobjectmapper.php | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/private/systemtag/systemtagobjectmapper.php b/lib/private/systemtag/systemtagobjectmapper.php index d82898a29c..d8ff069910 100644 --- a/lib/private/systemtag/systemtagobjectmapper.php +++ b/lib/private/systemtag/systemtagobjectmapper.php @@ -172,23 +172,32 @@ class SystemTagObjectMapper implements ISystemTagObjectMapper { $this->assertTagsExist([$tagId]); $query = $this->connection->getQueryBuilder(); - $query->select($query->createFunction('COUNT(1)')) - ->from(self::RELATION_TABLE) + + if (!$all) { + // If we only need one entry, we make the query lighter, by not + // counting the elements + $query->select('*') + ->setMaxResults(1); + } else { + $query->select($query->createFunction('COUNT(1)')); + } + + $query->from(self::RELATION_TABLE) ->where($query->expr()->in('objectid', $query->createParameter('objectids'))) ->andWhere($query->expr()->eq('objecttype', $query->createParameter('objecttype'))) ->andWhere($query->expr()->eq('systemtagid', $query->createParameter('tagid'))) ->setParameter('objectids', $objIds, Connection::PARAM_INT_ARRAY) ->setParameter('tagid', $tagId) - ->setParameter('objecttype', $objectType) - ->setMaxResults(1); + ->setParameter('objecttype', $objectType); $result = $query->execute(); $row = $result->fetch(\PDO::FETCH_NUM); $result->closeCursor(); + if ($all) { return ((int)$row[0] === count($objIds)); } else { - return (int)$row[0] > 0; + return (bool) $row; } }