From d6629ed18863f797d34ebdc65815d7af21cb8332 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 2 Mar 2021 15:03:01 +0300 Subject: move dbupdater to db/updater; move base SCHEMA_VERSION constant inside db/updater class --- backend.php | 2 +- classes/db/updater.php | 82 ++++++++++++++++++++++++++++++++++++++++++++++ classes/dbupdater.php | 82 ---------------------------------------------- classes/handler/public.php | 12 +++---- classes/opml.php | 6 ++-- classes/rpc.php | 2 +- classes/rssutils.php | 2 +- classes/userhelper.php | 2 +- include/functions.php | 5 +-- update.php | 12 +++---- update_daemon2.php | 2 +- 11 files changed, 105 insertions(+), 104 deletions(-) create mode 100644 classes/db/updater.php delete mode 100644 classes/dbupdater.php diff --git a/backend.php b/backend.php index 4184e87c8..ef1184068 100644 --- a/backend.php +++ b/backend.php @@ -51,7 +51,7 @@ UserHelper::load_user_plugins($_SESSION["uid"]); } - if (Config::get_schema_version() !== SCHEMA_VERSION) { + if (Db_Updater::is_update_required()) { print Errors::to_json(Errors::E_SCHEMA_MISMATCH); return; } diff --git a/classes/db/updater.php b/classes/db/updater.php new file mode 100644 index 000000000..9d27c94d9 --- /dev/null +++ b/classes/db/updater.php @@ -0,0 +1,82 @@ +pdo = $pdo; + $this->db_type = $db_type; + } + + /** always returns actual (=uncached) value */ + private static function get_schema_version() { + return Config::get_schema_version(true); + } + + static function is_update_required() { + return self::get_schema_version() < self::SCHEMA_VERSION; + } + + function get_schema_lines($version) { + $filename = "schema/versions/".$this->db_type."/$version.sql"; + + if (file_exists($filename)) { + return explode(";", (string)preg_replace("/[\r\n]/", "", (string)file_get_contents($filename))); + } else { + user_error("DB Updater: schema file for version $version is not found."); + return false; + } + } + + function update_to($version, $html_output = true) { + if ($this->get_schema_version() == $version - 1) { + + $lines = $this->get_schema_lines($version); + + if (is_array($lines)) { + + $this->pdo->beginTransaction(); + + foreach ($lines as $line) { + if (strpos($line, "--") !== 0 && $line) { + + if ($html_output) + print "
$line
"; + else + Debug::log("> $line"); + + try { + $this->pdo->query($line); // PDO returns errors as exceptions now + } catch (PDOException $e) { + if ($html_output) { + print "
Error: " . $e->getMessage() . "
"; + } else { + Debug::log("Error: " . $e->getMessage()); + } + + $this->pdo->rollBack(); + return false; + } + } + } + + $db_version = self::get_schema_version(); + + if ($db_version == $version) { + $this->pdo->commit(); + return true; + } else { + $this->pdo->rollBack(); + return false; + } + } else { + return false; + } + } else { + return false; + } + } + +} diff --git a/classes/dbupdater.php b/classes/dbupdater.php deleted file mode 100644 index d1df31b40..000000000 --- a/classes/dbupdater.php +++ /dev/null @@ -1,82 +0,0 @@ -pdo = $pdo; - $this->db_type = $db_type; - $this->need_version = (int) $need_version; - } - - function get_schema_version() { - return Config::get_schema_version(true); - } - - function is_update_required() { - return $this->get_schema_version() < $this->need_version; - } - - function get_schema_lines($version) { - $filename = "schema/versions/".$this->db_type."/$version.sql"; - - if (file_exists($filename)) { - return explode(";", (string)preg_replace("/[\r\n]/", "", (string)file_get_contents($filename))); - } else { - user_error("DB Updater: schema file for version $version is not found."); - return false; - } - } - - function update_to($version, $html_output = true) { - if ($this->get_schema_version() == $version - 1) { - - $lines = $this->get_schema_lines($version); - - if (is_array($lines)) { - - $this->pdo->beginTransaction(); - - foreach ($lines as $line) { - if (strpos($line, "--") !== 0 && $line) { - - if ($html_output) - print "
$line
"; - else - Debug::log("> $line"); - - try { - $this->pdo->query($line); // PDO returns errors as exceptions now - } catch (PDOException $e) { - if ($html_output) { - print "
Error: " . $e->getMessage() . "
"; - } else { - Debug::log("Error: " . $e->getMessage()); - } - - $this->pdo->rollBack(); - return false; - } - } - } - - $db_version = $this->get_schema_version(); - - if ($db_version == $version) { - $this->pdo->commit(); - return true; - } else { - $this->pdo->rollBack(); - return false; - } - } else { - return false; - } - } else { - return false; - } - } - -} diff --git a/classes/handler/public.php b/classes/handler/public.php index f7df6fc74..08df7bbc1 100755 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -660,14 +660,14 @@ class Handler_Public extends Handler { is_update_required()) { + if (Db_Updater::is_update_required()) { - print "

" . T_sprintf("Performing updates to version %d", SCHEMA_VERSION) . "

"; + print "

" . T_sprintf("Performing updates to version %d", Db_Updater::SCHEMA_VERSION) . "

"; - for ($i = $updater->get_schema_version() + 1; $i <= SCHEMA_VERSION; $i++) { + for ($i = Config::get_schema_version(true) + 1; $i <= Db_Updater::SCHEMA_VERSION; $i++) { print "