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 --- classes/db/updater.php | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 classes/db/updater.php (limited to 'classes/db') 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; + } + } + +} -- cgit v1.2.3