diff options
Diffstat (limited to 'vendor/PicoDb/Schema.php')
-rw-r--r-- | vendor/PicoDb/Schema.php | 60 |
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 |