|
|
@@ -1,8 +1,9 @@
|
|
|
<?php
|
|
|
+
|
|
|
/**
|
|
|
* MINZ - Copyright 2011 Marien Fressinaud
|
|
|
* Sous licence AGPL3 <http://www.gnu.org/licenses/>
|
|
|
-*/
|
|
|
+ */
|
|
|
|
|
|
/**
|
|
|
* La classe Model_sql représente le modèle interragissant avec les bases de données
|
|
|
@@ -63,12 +64,12 @@ class Minz_ModelPdo {
|
|
|
$dsn .= ';port=' . $dbServer['port'];
|
|
|
}
|
|
|
$driver_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES utf8mb4';
|
|
|
- $this->pdo = new MinzPDOMySql($dsn . $dsnParams, $db['user'], $db['password'], $driver_options);
|
|
|
+ $this->pdo = new Minz_PdoMysql($dsn . $dsnParams, $db['user'], $db['password'], $driver_options);
|
|
|
$this->pdo->setPrefix($db['prefix'] . $currentUser . '_');
|
|
|
break;
|
|
|
case 'sqlite':
|
|
|
$dsn = 'sqlite:' . join_path(DATA_PATH, 'users', $currentUser, 'db.sqlite');
|
|
|
- $this->pdo = new MinzPDOSQLite($dsn . $dsnParams, $db['user'], $db['password'], $driver_options);
|
|
|
+ $this->pdo = new Minz_PdoSqlite($dsn . $dsnParams, $db['user'], $db['password'], $driver_options);
|
|
|
$this->pdo->setPrefix('');
|
|
|
break;
|
|
|
case 'pgsql':
|
|
|
@@ -79,7 +80,7 @@ class Minz_ModelPdo {
|
|
|
if (!empty($dbServer['port'])) {
|
|
|
$dsn .= ';port=' . $dbServer['port'];
|
|
|
}
|
|
|
- $this->pdo = new MinzPDOPGSQL($dsn . $dsnParams, $db['user'], $db['password'], $driver_options);
|
|
|
+ $this->pdo = new Minz_PdoPgsql($dsn . $dsnParams, $db['user'], $db['password'], $driver_options);
|
|
|
$this->pdo->setPrefix($db['prefix'] . $currentUser . '_');
|
|
|
break;
|
|
|
default:
|
|
|
@@ -115,95 +116,3 @@ class Minz_ModelPdo {
|
|
|
self::$sharedCurrentUser = '';
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-abstract class MinzPDO extends PDO {
|
|
|
- public function __construct($dsn, $username = null, $passwd = null, $options = null) {
|
|
|
- parent::__construct($dsn, $username, $passwd, $options);
|
|
|
- $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
|
|
|
- }
|
|
|
-
|
|
|
- abstract public function dbType();
|
|
|
-
|
|
|
- private $prefix = '';
|
|
|
- public function prefix() { return $this->prefix; }
|
|
|
- public function setPrefix($prefix) { $this->prefix = $prefix; }
|
|
|
-
|
|
|
- private function autoPrefix($sql) {
|
|
|
- return str_replace('`_', '`' . $this->prefix, $sql);
|
|
|
- }
|
|
|
-
|
|
|
- protected function preSql($statement) {
|
|
|
- if (preg_match('/^(?:UPDATE|INSERT|DELETE)/i', $statement)) {
|
|
|
- invalidateHttpCache();
|
|
|
- }
|
|
|
- return $this->autoPrefix($statement);
|
|
|
- }
|
|
|
-
|
|
|
- public function lastInsertId($name = null) {
|
|
|
- if ($name != null) {
|
|
|
- $name = $this->preSql($name);
|
|
|
- }
|
|
|
- return parent::lastInsertId($name);
|
|
|
- }
|
|
|
-
|
|
|
- public function prepare($statement, $driver_options = array()) {
|
|
|
- $statement = $this->preSql($statement);
|
|
|
- return parent::prepare($statement, $driver_options);
|
|
|
- }
|
|
|
-
|
|
|
- public function exec($statement) {
|
|
|
- $statement = $this->preSql($statement);
|
|
|
- return parent::exec($statement);
|
|
|
- }
|
|
|
-
|
|
|
- public function query($query, $fetch_mode = null, ...$fetch_mode_args) {
|
|
|
- $query = $this->preSql($query);
|
|
|
- return $fetch_mode ? parent::query($query, $fetch_mode, ...$fetch_mode_args) : parent::query($query);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-class MinzPDOMySql extends MinzPDO {
|
|
|
- public function __construct($dsn, $username = null, $passwd = null, $options = null) {
|
|
|
- parent::__construct($dsn, $username, $passwd, $options);
|
|
|
- $this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
|
|
|
- }
|
|
|
-
|
|
|
- public function dbType() {
|
|
|
- return 'mysql';
|
|
|
- }
|
|
|
-
|
|
|
- public function lastInsertId($name = null) {
|
|
|
- return parent::lastInsertId(); //We discard the name, only used by PostgreSQL
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-class MinzPDOSQLite extends MinzPDO {
|
|
|
- public function __construct($dsn, $username = null, $passwd = null, $options = null) {
|
|
|
- parent::__construct($dsn, $username, $passwd, $options);
|
|
|
- $this->exec('PRAGMA foreign_keys = ON;');
|
|
|
- }
|
|
|
-
|
|
|
- public function dbType() {
|
|
|
- return 'sqlite';
|
|
|
- }
|
|
|
-
|
|
|
- public function lastInsertId($name = null) {
|
|
|
- return parent::lastInsertId(); //We discard the name, only used by PostgreSQL
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-class MinzPDOPGSQL extends MinzPDO {
|
|
|
- public function __construct($dsn, $username = null, $passwd = null, $options = null) {
|
|
|
- parent::__construct($dsn, $username, $passwd, $options);
|
|
|
- $this->exec("SET NAMES 'UTF8';");
|
|
|
- }
|
|
|
-
|
|
|
- public function dbType() {
|
|
|
- return 'pgsql';
|
|
|
- }
|
|
|
-
|
|
|
- protected function preSql($statement) {
|
|
|
- $statement = parent::preSql($statement);
|
|
|
- return str_replace(array('`', ' LIKE '), array('"', ' ILIKE '), $statement);
|
|
|
- }
|
|
|
-}
|