From 6fbb5a380ddab02a1a0d639524710fadaab4f246 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Tue, 26 Mar 2024 09:24:55 +0100 Subject: [PATCH] Add missing default value for short url visits count --- ....Core.Visit.Entity.ShortUrlVisitsCount.php | 1 + .../ShortUrlVisitsCountPreFlushListener.php | 45 ++++++++++--------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/module/Core/config/entities-mappings/Shlinkio.Shlink.Core.Visit.Entity.ShortUrlVisitsCount.php b/module/Core/config/entities-mappings/Shlinkio.Shlink.Core.Visit.Entity.ShortUrlVisitsCount.php index 8e06f5c0..d4a8546b 100644 --- a/module/Core/config/entities-mappings/Shlinkio.Shlink.Core.Visit.Entity.ShortUrlVisitsCount.php +++ b/module/Core/config/entities-mappings/Shlinkio.Shlink.Core.Visit.Entity.ShortUrlVisitsCount.php @@ -28,6 +28,7 @@ return static function (ClassMetadata $metadata, array $emConfig): void { $builder->createField('count', Types::BIGINT) ->columnName('count') ->option('unsigned', true) + ->option('default', 1) ->build(); $builder->createField('slotId', Types::INTEGER) diff --git a/module/Core/src/Visit/Listener/ShortUrlVisitsCountPreFlushListener.php b/module/Core/src/Visit/Listener/ShortUrlVisitsCountPreFlushListener.php index 6a006e54..74812e44 100644 --- a/module/Core/src/Visit/Listener/ShortUrlVisitsCountPreFlushListener.php +++ b/module/Core/src/Visit/Listener/ShortUrlVisitsCountPreFlushListener.php @@ -108,17 +108,20 @@ final readonly class ShortUrlVisitsCountPreFlushListener // For engines without a specific UPSERT syntax, do a regular locked select followed by an insert or update $qb = $conn->createQueryBuilder(); $qb->select('id') - ->from('short_url_visits_counts') - ->where($qb->expr()->and( - $qb->expr()->eq('short_url_id', ':short_url_id'), - $qb->expr()->eq('potential_bot', ':potential_bot'), - $qb->expr()->eq('slot_id', ':slot_id'), - )) - ->setParameter('short_url_id', $shortUrlId) - ->setParameter('potential_bot', $potentialBot) - ->setParameter('slot_id', $slotId) - ->forUpdate() - ->setMaxResults(1); + ->from('short_url_visits_counts') + ->where($qb->expr()->and( + $qb->expr()->eq('short_url_id', ':short_url_id'), + $qb->expr()->eq('potential_bot', ':potential_bot'), + $qb->expr()->eq('slot_id', ':slot_id'), + )) + ->setParameter('short_url_id', $shortUrlId) + ->setParameter('potential_bot', $potentialBot) + ->setParameter('slot_id', $slotId) + ->setMaxResults(1); + + if ($conn->getDatabasePlatform()::class === SQLServerPlatform::class) { + $qb->forUpdate(); + } $resultSet = $qb->executeQuery()->fetchOne(); $writeQb = ! $resultSet @@ -130,17 +133,17 @@ final readonly class ShortUrlVisitsCountPreFlushListener 'slot_id' => ':slot_id', ]) : $conn->createQueryBuilder() - ->update('short_url_visits_counts') - ->set('count', 'count + 1') - ->where($qb->expr()->and( - $qb->expr()->eq('short_url_id', ':short_url_id'), - $qb->expr()->eq('potential_bot', ':potential_bot'), - $qb->expr()->eq('slot_id', ':slot_id'), - )); + ->update('short_url_visits_counts') + ->set('count', 'count + 1') + ->where($qb->expr()->and( + $qb->expr()->eq('short_url_id', ':short_url_id'), + $qb->expr()->eq('potential_bot', ':potential_bot'), + $qb->expr()->eq('slot_id', ':slot_id'), + )); $writeQb->setParameter('short_url_id', $shortUrlId) - ->setParameter('potential_bot', $potentialBot) - ->setParameter('slot_id', $slotId) - ->executeStatement(); + ->setParameter('potential_bot', $potentialBot) + ->setParameter('slot_id', $slotId) + ->executeStatement(); } }