diff --git a/src/Migration/Migrator.php b/src/Migration/Migrator.php index 3b31fb3..bb199c9 100644 --- a/src/Migration/Migrator.php +++ b/src/Migration/Migrator.php @@ -6,6 +6,7 @@ use Gt\Database\Database; use Gt\Database\Connection\Settings; use Gt\Database\DatabaseException; +use PHPSQLParser\lexer\PHPSQLLexer; use SplFileInfo; use SplFileObject; @@ -200,11 +201,30 @@ public function performMigration( $this->output("Migration $fileNumber: `$file`."); - $sql = file_get_contents($file); + $totalSql = file_get_contents($file); $md5 = md5_file($file); + $lexer = new PHPSQLLexer(); + $splitSqlQueryList = []; + $currentQuery = ""; + foreach($lexer->split($totalSql) as $token) { + if($token === ";") { + array_push($splitSqlQueryList, $currentQuery); + $currentQuery = ""; + continue; + } + + $currentQuery .= $token; + } + if($currentQuery) { + array_push($splitSqlQueryList, $currentQuery); + } + try { - $this->dbClient->executeSql($sql); + foreach($splitSqlQueryList as $sql) { + $this->dbClient->executeSql($sql); + } + $this->recordMigrationSuccess($fileNumber, $md5); } catch(DatabaseException $exception) {