Skip to content

Commit 81743f2

Browse files
committed
Fix upgrade command failing on MySQL/MariaDB with "no active transaction"
Move DDL statements (DROP/CREATE TABLE) outside the transaction wrapper since MySQL implicitly commits on DDL, then wrap only DML inserts in a transaction to preserve data integrity. Fixes #177
1 parent 79008f9 commit 81743f2

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

src/Console/Commands/UpgradeCommand.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,7 @@ public function handle(): int
7575
}
7676

7777
try {
78-
$callback = fn () => $this->db()->transaction(function () {
79-
$this->migrateData();
80-
});
78+
$callback = fn () => $this->migrateData();
8179

8280
$this->input->isInteractive()
8381
? spin(callback: $callback, message: 'Migrating data to v2 schema...')
@@ -148,11 +146,13 @@ private function migrateData(): void
148146
$this->dropSharedV1Tables();
149147
$this->createV2Tables();
150148

151-
$languageMap = $this->migrateLanguages($v1Languages, $v1Translations);
152-
$groupMap = $this->migrateFiles($v1Files);
153-
$this->migratePhrases($v1Phrases, $v1Translations, $groupMap, $languageMap);
154-
$this->migrateContributors($v1Contributors);
155-
$this->migrateInvites($v1Invites);
149+
$this->db()->transaction(function () use ($v1Languages, $v1Translations, $v1Files, $v1Phrases, $v1Contributors, $v1Invites) {
150+
$languageMap = $this->migrateLanguages($v1Languages, $v1Translations);
151+
$groupMap = $this->migrateFiles($v1Files);
152+
$this->migratePhrases($v1Phrases, $v1Translations, $groupMap, $languageMap);
153+
$this->migrateContributors($v1Contributors);
154+
$this->migrateInvites($v1Invites);
155+
});
156156

157157
$this->verifyIntegrity($v1Languages, $v1Files, $v1Phrases, $v1Contributors, $v1Invites);
158158
}

0 commit comments

Comments
 (0)