From 7c17987d0c353c17f278f823ad7b31592fe8f354 Mon Sep 17 00:00:00 2001 From: Helmut Hummel <typo3@helhum.io> Date: Thu, 16 Dec 2021 13:42:48 +0100 Subject: [PATCH] [BUGFIX] Avoid select and therefore fetchFirstColumn() of doctrine/dbal Get rid of the select query entirely, which optimises the task to only require one update query instead of one select and possibly multiple update queries and gets rid of doctrine version related incompatibilities with fetching the select result. Resolves: #96369 Related: #87162 Releases: main, 11.5, 10.4 Change-Id: I87b570f5efa3d77ed5f2c5fc0074e84bef4675a4 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/72692 Tested-by: Helmut Hummel <typo3@helhum.io> Tested-by: core-ci <typo3@b13.com> Reviewed-by: Helmut Hummel <typo3@helhum.io> --- .../Resource/MetaDataEventListener.php | 41 +++++++------------ 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/typo3/sysext/core/Classes/Resource/MetaDataEventListener.php b/typo3/sysext/core/Classes/Resource/MetaDataEventListener.php index 4a94048af194..fa9d3241f3cf 100644 --- a/typo3/sysext/core/Classes/Resource/MetaDataEventListener.php +++ b/typo3/sysext/core/Classes/Resource/MetaDataEventListener.php @@ -26,13 +26,16 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; */ final class MetaDataEventListener { - private $tableName = 'sys_file_metadata'; + private const TABLE_NAME = 'sys_file_metadata'; + /** + * @param AfterFileMetaDataUpdatedEvent $event + */ public function afterFileMetaDataUpdated(AfterFileMetaDataUpdatedEvent $event): void { $record = $event->getRecord(); - if ((int)$record['width'] <= 0 || (int)$record['height'] <= 0) { + if (($record['width'] ?? 0) <= 0 || ($record['height'] ?? 0) <= 0) { return; } @@ -41,29 +44,15 @@ final class MetaDataEventListener 'height' => (int)$record['height'], ]; - // Fetch translated meta data records - $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($this->tableName); - $translations = $connection->select( - ['uid'], - $this->tableName, - ['file' => $event->getFileUid(), 'l10n_parent' => $event->getMetaDataUid()] - )->fetchFirstColumn(); - - if (empty($translations)) { - return; - } - - // Update width and height of all translations - foreach ($translations as $uid) { - if ((int)$uid > 0) { - $connection->update( - $this->tableName, - $metaData, - [ - 'uid' => (int)$uid, - ] - ); - } - } + // Update translated meta data records + $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable(self::TABLE_NAME); + $connection->update( + self::TABLE_NAME, + $metaData, + [ + 'file' => $event->getFileUid(), + 'l10n_parent' => $event->getMetaDataUid(), + ] + ); } } -- GitLab