Bug #94709

TypeError for SQLite in DB Compare

Added by Daniel Siepmann 4 months ago. Updated 3 months ago.

Status:
Closed
Priority:
Should have
Category:
Install Tool
Target version:
Start date:
2021-08-04
Due date:
% Done:

100%

Estimated time:
TYPO3 Version:
11
PHP Version:
7.4
Tags:
Complexity:
Is Regression:
Sprint Focus:

Description

The following error id displayed to the user within Backend Maintenance module when doing a DB compare with sqlite database. I've an old v10 updated to current master and trying to execute db compare.

(1/1) TypeError

Argument 2 passed to Doctrine\DBAL\Connection::handleExceptionDuringQuery() must be of the type string, array given, called in /home/daniels/Projects/own/website-typo3/project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php on line 1524

The issue seems to be within TYPO3\CMS\Core\Database\Schema\SchemaMigrator::migrate which generates arrays instead of strings of SQL for SQLite.

          $updateSuggestionsPerConnection = array_merge_recursive(
              $this->getUpdateSuggestions($statements),
              $this->getUpdateSuggestions($statements, true)
          );

Contains the issue, some SQL exists in both and is combined as new array containing duplicates.
at Doctrine\DBAL\Connection->handleExceptionDuringQuery()
in /home/daniels/Projects/own/website-typo3/project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php line 1524

                $result = $connection->exec($sql);
            }
        } catch (Throwable $e) {
            $this->handleExceptionDuringQuery(
                $e,
                $sql,
                $params,
                $types
            );

at Doctrine\DBAL\Connection->executeStatement()
in /home/daniels/Projects/own/website-typo3/project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php line 1473

            'https://github.com/doctrine/dbal/pull/4163',
            'Connection::executeUpdate() is deprecated, use Connection::executeStatement() instead.'
        );

        return $this->executeStatement($sql, $params, $types);
    }

    /**
     * Executes an SQL statement with the given parameters and returns the number of affected rows.

at Doctrine\DBAL\Connection->executeUpdate()
in /home/daniels/Projects/own/website-typo3/project/public/typo3/sysext/core/Classes/Database/Schema/SchemaMigrator.php line 142

            $connection = $connectionPool->getConnectionByName($connectionName);
            foreach ($statementsToExecute as $hash => $statement) {
                try {
                    $connection->executeUpdate($statement);
                } catch (DBALException $e) {
                    $result[$hash] = $e->getPrevious()->getMessage();
                }
            }

Related issues

Related to TYPO3 Core - Bug #94710: Database Compare "Change fields" with SQLite shows red errorUnder Review2021-08-04

Actions
Related to TYPO3 Core - Bug #90754: Database Compare with SQLite can not be finishedClosed2020-03-13

Actions

Also available in: Atom PDF