diff options
Diffstat (limited to 'vendor')
-rw-r--r-- | vendor/PicoDb/Database.php | 5 | ||||
-rw-r--r-- | vendor/PicoDb/Drivers/Postgres.php | 73 |
2 files changed, 78 insertions, 0 deletions
diff --git a/vendor/PicoDb/Database.php b/vendor/PicoDb/Database.php index 9201e9d2..4d7b7031 100644 --- a/vendor/PicoDb/Database.php +++ b/vendor/PicoDb/Database.php @@ -27,6 +27,11 @@ class Database $this->pdo = new Mysql($settings); break; + case 'postgres': + require_once __DIR__.'/Drivers/Postgres.php'; + $this->pdo = new Postgres($settings); + break; + default: throw new \LogicException('This database driver is not supported.'); } diff --git a/vendor/PicoDb/Drivers/Postgres.php b/vendor/PicoDb/Drivers/Postgres.php new file mode 100644 index 00000000..641727f3 --- /dev/null +++ b/vendor/PicoDb/Drivers/Postgres.php @@ -0,0 +1,73 @@ +<?php + +namespace PicoDb; + +class Postgres extends \PDO { + + private $schema_table = 'schema_version'; + + + public function __construct(array $settings) + { + $required_atttributes = array( + 'hostname', + 'username', + 'password', + 'database', + ); + + foreach ($required_atttributes as $attribute) { + if (! isset($settings[$attribute])) { + throw new \LogicException('This configuration parameter is missing: "'.$attribute.'"'); + } + } + + $dsn = 'pgsql:host='.$settings['hostname'].';dbname='.$settings['database']; + + parent::__construct($dsn, $settings['username'], $settings['password']); + + if (isset($settings['schema_table'])) { + $this->schema_table = $settings['schema_table']; + } + } + + + public function getSchemaVersion() + { + $this->exec("CREATE TABLE IF NOT EXISTS ".$this->schema_table." (version SMALLINT DEFAULT 0)"); + + $rq = $this->prepare('SELECT version FROM '.$this->schema_table.''); + $rq->execute(); + $result = $rq->fetch(\PDO::FETCH_ASSOC); + + if (isset($result['version'])) { + return (int) $result['version']; + } + else { + $this->exec('INSERT INTO '.$this->schema_table.' VALUES(0)'); + } + + return 0; + } + + + public function setSchemaVersion($version) + { + $rq = $this->prepare('UPDATE '.$this->schema_table.' SET version=?'); + $rq->execute(array($version)); + } + + + public function getLastId() + { + $rq = $this->prepare('SELECT LASTVAL()'); + $rq->execute(); + return $rq->fetchColumn(); + } + + + public function escapeIdentifier($value) + { + return $value; + } +}
\ No newline at end of file |