From a44b2676b95f9f8901806bb6b0c9871471bf9b61 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 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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/+/72693 Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Reviewed-by: Oliver Klee <typo3-coding@oliverklee.de> Reviewed-by: Benni Mack <benni@typo3.org> Reviewed-by: Stefan Bürk <stefan@buerk.tech> Reviewed-by: Helmut Hummel <typo3@helhum.io> Tested-by: core-ci <typo3@b13.com> Tested-by: Benni Mack <benni@typo3.org> Tested-by: Stefan Bürk <stefan@buerk.tech> Tested-by: Helmut Hummel <typo3@helhum.io> --- .../Resource/MetaDataEventListener.php | 40 ++++++------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/typo3/sysext/core/Classes/Resource/MetaDataEventListener.php b/typo3/sysext/core/Classes/Resource/MetaDataEventListener.php index d557d7f52c9d..fa9d3241f3cf 100644 --- a/typo3/sysext/core/Classes/Resource/MetaDataEventListener.php +++ b/typo3/sysext/core/Classes/Resource/MetaDataEventListener.php @@ -26,16 +26,16 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; */ final class MetaDataEventListener { - private string $tableName = 'sys_file_metadata'; + private const TABLE_NAME = 'sys_file_metadata'; /** - * @throws \Doctrine\DBAL\Driver\Exception + * @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; } @@ -44,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