From 8f8ca49e4b3d06b19f7bef0f918b7425a456c5ac Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 4 Mar 2021 10:13:29 +0300 Subject: [PATCH] migrations: refuse to apply empty schema files --- classes/db/migrations.php | 46 ++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/classes/db/migrations.php b/classes/db/migrations.php index 26866698b..4bd72bd09 100644 --- a/classes/db/migrations.php +++ b/classes/db/migrations.php @@ -82,30 +82,36 @@ class Db_Migrations { else Debug::log("Starting migration to $version...", Debug::LOG_VERBOSE); - // mysql doesn't support transactions for DDL statements - if (Config::get(Config::DB_TYPE) != "mysql") - $this->pdo->beginTransaction(); + $lines = $this->get_lines($version); - foreach ($this->get_lines($version) as $line) { - Debug::log($line, Debug::LOG_EXTENDED); - try { - $this->pdo->query($line); - } catch (PDOException $e) { - Debug::log("Failed on line: $line", Debug::LOG_VERBOSE); - throw $e; + if (count($lines) > 0) { + // mysql doesn't support transactions for DDL statements + if (Config::get(Config::DB_TYPE) != "mysql") + $this->pdo->beginTransaction(); + + foreach ($lines as $line) { + Debug::log($line, Debug::LOG_EXTENDED); + try { + $this->pdo->query($line); + } catch (PDOException $e) { + Debug::log("Failed on line: $line", Debug::LOG_VERBOSE); + throw $e; + } } + + if ($version == 0 && $this->base_is_latest) + $this->set_version($this->get_max_version()); + else + $this->set_version($version); + + if (Config::get(Config::DB_TYPE) != "mysql") + $this->pdo->commit(); + + Debug::log("Migration finished, current version: " . $this->get_version(), Debug::LOG_VERBOSE); + } else { + Debug::log("Migration failed: schema file is empty or missing.", Debug::LOG_VERBOSE); } - if ($version == 0 && $this->base_is_latest) - $this->set_version($this->get_max_version()); - else - $this->set_version($version); - - if (Config::get(Config::DB_TYPE) != "mysql") - $this->pdo->commit(); - - Debug::log("Migration finished, current version: " . $this->get_version(), Debug::LOG_VERBOSE); - } catch (PDOException $e) { Debug::log("Migration failed: " . $e->getMessage(), Debug::LOG_VERBOSE); try {