summaryrefslogtreecommitdiff
path: root/vendor/PicoDb/Schema.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/PicoDb/Schema.php')
-rw-r--r--vendor/PicoDb/Schema.php60
1 files changed, 60 insertions, 0 deletions
diff --git a/vendor/PicoDb/Schema.php b/vendor/PicoDb/Schema.php
new file mode 100644
index 00000000..2f52b846
--- /dev/null
+++ b/vendor/PicoDb/Schema.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace PicoDb;
+
+class Schema
+{
+ protected $db = null;
+
+
+ public function __construct(Database $db)
+ {
+ $this->db = $db;
+ }
+
+
+ public function check($last_version = 1)
+ {
+ $current_version = $this->db->getConnection()->getSchemaVersion();
+
+ if ($current_version < $last_version) {
+
+ return $this->migrateTo($current_version, $last_version);
+ }
+
+ return true;
+ }
+
+
+ public function migrateTo($current_version, $next_version)
+ {
+ try {
+
+ $this->db->startTransaction();
+
+ for ($i = $current_version + 1; $i <= $next_version; $i++) {
+
+ $function_name = '\Schema\version_'.$i;
+
+ if (function_exists($function_name)) {
+
+ call_user_func($function_name, $this->db->getConnection());
+ $this->db->getConnection()->setSchemaVersion($i);
+ }
+ else {
+
+ throw new \LogicException('To execute a database migration, you need to create this function: "'.$function_name.'".');
+ }
+ }
+
+ $this->db->closeTransaction();
+ }
+ catch (\PDOException $e) {
+
+ $this->db->cancelTransaction();
+ return false;
+ }
+
+ return true;
+ }
+} \ No newline at end of file