Prevent exception due to missing database columns in update wizard (#29)

This commit is contained in:
Daniel Siepmann 2023-07-04 10:31:01 +02:00 committed by GitHub
parent 9f0eaac154
commit 6348b1079d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 12 deletions

View file

@ -75,7 +75,8 @@ class MigrateOldLocations implements UpgradeWizardInterface
public function updateNecessary(): bool
{
return $this->getQueryBuilder()
return $this->hasOldColumns()
&& $this->getQueryBuilder()
->count('*')
->execute()
->fetchOne() > 0
@ -219,17 +220,8 @@ class MigrateOldLocations implements UpgradeWizardInterface
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 @@ class MigrateOldLocations implements UpgradeWizardInterface
];
}
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;

View file

@ -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
-----