Don't try a transaction for the migrator on MySQL
As per https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html CREATE TABLE statements automatically commit always. The only reason this worked in the past was that PHPs PDO connection didn't check the actual state on commit, but only checked their internal state. But in PHP8 this was fixed: https://github.com/php/php-src/blob/PHP-8.0/UPGRADING#L446-L450 So now commit() fails because the internal PDO connection implicitly commited already. Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
81302f78e5
commit
3cdfe7b0f4
|
@ -32,6 +32,7 @@
|
|||
namespace OC\DB;
|
||||
|
||||
use Doctrine\DBAL\Exception;
|
||||
use Doctrine\DBAL\Platforms\MySQLPlatform;
|
||||
use Doctrine\DBAL\Schema\AbstractAsset;
|
||||
use Doctrine\DBAL\Schema\Comparator;
|
||||
use Doctrine\DBAL\Schema\Index;
|
||||
|
@ -238,15 +239,19 @@ class Migrator {
|
|||
|
||||
$schemaDiff = $this->getDiff($targetSchema, $connection);
|
||||
|
||||
if (!$connection->getDatabasePlatform() instanceof MySQLPlatform) {
|
||||
$connection->beginTransaction();
|
||||
}
|
||||
$sqls = $schemaDiff->toSql($connection->getDatabasePlatform());
|
||||
$step = 0;
|
||||
foreach ($sqls as $sql) {
|
||||
$this->emit($sql, $step++, count($sqls));
|
||||
$connection->query($sql);
|
||||
}
|
||||
if (!$connection->getDatabasePlatform() instanceof MySQLPlatform) {
|
||||
$connection->commit();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sourceName
|
||||
|
|
Loading…
Reference in New Issue