From d9dfd9d6199b15eba9510ef460e18c9245d9ab12 Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Sun, 30 Mar 2014 19:53:59 -0400 Subject: Add Mysql/MariaDB support --- vendor/PicoDb/Database.php | 7 +++- vendor/PicoDb/Drivers/Mysql.php | 76 ++++++++++++++++++++++++++++++++++++++++ vendor/PicoDb/Drivers/Sqlite.php | 17 ++++++--- vendor/PicoDb/Schema.php | 1 - vendor/PicoDb/Table.php | 3 +- 5 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 vendor/PicoDb/Drivers/Mysql.php (limited to 'vendor/PicoDb') diff --git a/vendor/PicoDb/Database.php b/vendor/PicoDb/Database.php index 86f5fe3c..9201e9d2 100644 --- a/vendor/PicoDb/Database.php +++ b/vendor/PicoDb/Database.php @@ -19,7 +19,12 @@ class Database case 'sqlite': require_once __DIR__.'/Drivers/Sqlite.php'; - $this->pdo = new Sqlite($settings['filename']); + $this->pdo = new Sqlite($settings); + break; + + case 'mysql': + require_once __DIR__.'/Drivers/Mysql.php'; + $this->pdo = new Mysql($settings); break; default: diff --git a/vendor/PicoDb/Drivers/Mysql.php b/vendor/PicoDb/Drivers/Mysql.php new file mode 100644 index 00000000..22277a01 --- /dev/null +++ b/vendor/PicoDb/Drivers/Mysql.php @@ -0,0 +1,76 @@ + 'SET NAMES '.$settings['charset'] + ); + + parent::__construct($dsn, $settings['username'], $settings['password'], $options); + + 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` INT 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() + { + return $this->lastInsertId(); + } + + + public function escapeIdentifier($value) + { + if (strpos($value, '.') !== false) return $value; + return '`'.$value.'`'; + } +} \ No newline at end of file diff --git a/vendor/PicoDb/Drivers/Sqlite.php b/vendor/PicoDb/Drivers/Sqlite.php index 6555e73d..83b61c40 100644 --- a/vendor/PicoDb/Drivers/Sqlite.php +++ b/vendor/PicoDb/Drivers/Sqlite.php @@ -5,9 +5,19 @@ namespace PicoDb; class Sqlite extends \PDO { - public function __construct($filename) + public function __construct(array $settings) { - parent::__construct('sqlite:'.$filename); + $required_atttributes = array( + 'filename', + ); + + foreach ($required_atttributes as $attribute) { + if (! isset($settings[$attribute])) { + throw new \LogicException('This configuration parameter is missing: "'.$attribute.'"'); + } + } + + parent::__construct('sqlite:'.$settings['filename']); $this->exec('PRAGMA foreign_keys = ON'); } @@ -20,8 +30,7 @@ class Sqlite extends \PDO { $result = $rq->fetch(\PDO::FETCH_ASSOC); if (isset($result['user_version'])) { - - return $result['user_version']; + return (int) $result['user_version']; } return 0; diff --git a/vendor/PicoDb/Schema.php b/vendor/PicoDb/Schema.php index 2f52b846..b75366ea 100644 --- a/vendor/PicoDb/Schema.php +++ b/vendor/PicoDb/Schema.php @@ -18,7 +18,6 @@ class Schema $current_version = $this->db->getConnection()->getSchemaVersion(); if ($current_version < $last_version) { - return $this->migrateTo($current_version, $last_version); } diff --git a/vendor/PicoDb/Table.php b/vendor/PicoDb/Table.php index 4cdf35f7..494e350a 100644 --- a/vendor/PicoDb/Table.php +++ b/vendor/PicoDb/Table.php @@ -67,8 +67,7 @@ class Table $result = $this->db->execute($sql, $values); - if ($result !== false && $result->rowCount() > 0) { - + if ($result !== false/* && $result->rowCount() > 0*/) { return true; } -- cgit v1.2.3