Bug #89438

"Upgrade Wizard" - "Database Analyzer" - Loop

Added by Sven Wappler 9 months ago. Updated 8 months ago.

Status:
New
Priority:
Should have
Assignee:
-
Category:
Install Tool
Target version:
-
Start date:
2019-10-17
Due date:
% Done:

0%

TYPO3 Version:
9
PHP Version:
Tags:
Complexity:
Is Regression:
Sprint Focus:

Description

Currently, the Upgrade Wizard is not compatible with the Database Analyzer. The reason for this is the \TYPO3\CMS\Install\Updates\ExtensionManagerTables Task. It checks all tables with the SchemaMigrator and requires a generated database schema out of the TCA model.

$defaultTcaSchema = GeneralUtility::makeInstance(DefaultTcaSchema::class);
$tables = $defaultTcaSchema->enrich($tables);

Many extension authors do not use unsigned in their sql files for int fields. This leads to a very large number of fields being changed by ExtensionManagerTables, although it should only change 2 tables.
Using unsigned int field seems to be the new standard.

If you execute the Database Analyzer after this task, these fields are displayed incorrectly and it is suggested to restore them to their original non-unsigned state. This is because the Database Analyzer uses the sql files of the extensions as a basis before comparing them with the SchemaMigrator. An "enrich" is then no longer necessary.

Possible solution:
- Dissuade the ExtensionManagerTables Task from checking other tables. Because it should not be responsible for other modifications.

Then the system can regain 100% integrity.

loop.png View - Update Loop (209 KB) Sven Wappler, 2019-10-17 13:22


Related issues

Related to TYPO3 Core - Bug #91665: Upgrade wizard "ExtensionManagerTables" should not declare itself neccesary in composer and/or offline mode New 2020-06-17

History

#1 Updated by Christian Eßl 8 months ago

I noticed the same problem here in TYPO3 9.5.11.

ExtensionManagerTables::updateNecessary() reads in all update statements (event those that are not related to the extension manager). If at least one update statement is present, updateNecessary() will always return TRUE.

In ExtensionManagerTables::getUpdateStatements(), first $emTableStatements will only contain the statements for the extension manager tables. Then these statements are given to the SchemaMigrationService:

$updateSuggestions = $schemaMigrationService->getUpdateSuggestions($emTableStatements);

But appararently the SchemaMigrationService always returns the update suggestions for all tables, not only for those statements that were given as a parameter... So this looks like a bug in the SchemaMigrationService to me.

#2 Updated by Georg Ringer 27 days ago

  • Related to Bug #91665: Upgrade wizard "ExtensionManagerTables" should not declare itself neccesary in composer and/or offline mode added

Also available in: Atom PDF