summaryrefslogtreecommitdiff
path: root/classes/dbupdater.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2013-04-04 19:15:14 +0400
committerAndrew Dolgov <[email protected]>2013-04-04 19:15:14 +0400
commitb4c47f7e7b4c8220e07115f27c373df20503d576 (patch)
tree799276d1feea30f9e08c3a27fdd402c0eabfa1d9 /classes/dbupdater.php
parent29c8fa080e28f6c1c43343d68c36de96f7f9f086 (diff)
add command-line db schema updater
Diffstat (limited to 'classes/dbupdater.php')
-rw-r--r--classes/dbupdater.php65
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;
+ }
+ }
+
+} ?>