diff --git a/Classes/Updates/MigrateOldLocations.php b/Classes/Updates/MigrateOldLocations.php index abbe0b96..bcd4cde5 100644 --- a/Classes/Updates/MigrateOldLocations.php +++ b/Classes/Updates/MigrateOldLocations.php @@ -75,7 +75,8 @@ public function getDescription(): string public function updateNecessary(): bool { - return $this->getQueryBuilder() + return $this->hasOldColumns() + && $this->getQueryBuilder() ->count('*') ->execute() ->fetchOne() > 0 @@ -219,17 +220,8 @@ private function updateEvent(array $event): void private function getQueryBuilder(): QueryBuilder { - $columns = [ - 'name', - 'street', - 'district', - 'city', - 'zip', - 'country', - 'phone', - 'latitude', - 'longitude', - ]; + $columns = $this->columnsToFetch(); + $qb = $this->connectionPool->getQueryBuilderForTable('tx_events_domain_model_event'); $qb->getRestrictions()->removeAll(); $qb->select(...$columns); @@ -257,6 +249,41 @@ public function getPrerequisites(): array ]; } + private function hasOldColumns(): bool + { + $schema = $this->connectionPool + ->getConnectionForTable('tx_events_domain_model_event') + ->getSchemaManager() + ->createSchema() + ->getTable('tx_events_domain_model_event'); + + foreach ($this->columnsToFetch() as $column) { + if ($schema->hasColumn($column) === false) { + return false; + } + } + + return true; + } + + /** + * @return string[] + */ + private function columnsToFetch(): array + { + return [ + 'name', + 'street', + 'district', + 'city', + 'zip', + 'country', + 'phone', + 'latitude', + 'longitude', + ]; + } + public static function register(): void { $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][self::class] = self::class; diff --git a/Documentation/Changelog/3.4.0.rst b/Documentation/Changelog/3.4.0.rst index b4171109..468656bb 100644 --- a/Documentation/Changelog/3.4.0.rst +++ b/Documentation/Changelog/3.4.0.rst @@ -69,6 +69,11 @@ Fixes There are now two database queries and the logic is moved to PHP. Furthermore, the test cases were extended with another situation. +* Do not break update wizard due to missing columns. + The existing update wizard expects old columns to exist in order to migrate data. + Those might not exist in newer systems where migration is not necessary. + The wizard now properly checks for existence before querying the data. + Tasks -----