diff options
author | Andrew Dolgov <[email protected]> | 2013-04-04 19:15:14 +0400 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2013-04-04 19:15:14 +0400 |
commit | b4c47f7e7b4c8220e07115f27c373df20503d576 (patch) | |
tree | 799276d1feea30f9e08c3a27fdd402c0eabfa1d9 /classes/dbupdater.php | |
parent | 29c8fa080e28f6c1c43343d68c36de96f7f9f086 (diff) |
add command-line db schema updater
Diffstat (limited to 'classes/dbupdater.php')
-rw-r--r-- | classes/dbupdater.php | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/classes/dbupdater.php b/classes/dbupdater.php new file mode 100644 index 000000000..a9a713273 --- /dev/null +++ b/classes/dbupdater.php @@ -0,0 +1,65 @@ +<?php +class DbUpdater { + + private $link; + private $db_type; + private $need_version; + + function __construct($link, $db_type, $need_version) { + $this->link = $link; + $this->db_type = $db_type; + $this->need_version = (int) $need_version; + } + + function getSchemaVersion() { + $result = db_query($this->link, "SELECT schema_version FROM ttrss_version"); + return (int) db_fetch_result($result, 0, "schema_version"); + } + + function isUpdateRequired() { + return $this->getSchemaVersion() < $this->need_version; + } + + function getSchemaLines($version) { + $filename = "schema/versions/".$this->db_type."/$version.sql"; + + if (file_exists($filename)) { + return explode(";", preg_replace("/[\r\n]/", "", file_get_contents($filename))); + } else { + return false; + } + } + + function performUpdateTo($version) { + if ($this->getSchemaVersion() == $version - 1) { + + $lines = $this->getSchemaLines($version); + + if (is_array($lines)) { + + db_query($this->link, "BEGIN"); + + foreach ($lines as $line) { + if (strpos($line, "--") !== 0 && $line) { + db_query($this->link, $line); + } + } + + $db_version = $this->getSchemaVersion(); + + if ($db_version == $version) { + db_query($this->link, "COMMIT"); + return true; + } else { + db_query($this->link, "ROLLBACK"); + return false; + } + } else { + return true; + } + } else { + return false; + } + } + +} ?> |