aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Models/DatabaseDAO.php2
-rw-r--r--docs/en/developers/Minz/migrations.md2
-rw-r--r--lib/Minz/ModelPdo.php101
-rw-r--r--lib/Minz/Pdo.php52
-rw-r--r--lib/Minz/PdoMysql.php21
-rw-r--r--lib/Minz/PdoPgsql.php22
-rw-r--r--lib/Minz/PdoSqlite.php21
7 files changed, 123 insertions, 98 deletions
diff --git a/app/Models/DatabaseDAO.php b/app/Models/DatabaseDAO.php
index 9d762a615..45049e8d7 100644
--- a/app/Models/DatabaseDAO.php
+++ b/app/Models/DatabaseDAO.php
@@ -241,7 +241,7 @@ class FreshRSS_DatabaseDAO extends Minz_ModelPdo {
$sqlite = null;
try {
- $sqlite = new MinzPDOSQLite('sqlite:' . $filename);
+ $sqlite = new Minz_PdoSqlite('sqlite:' . $filename);
} catch (Exception $e) {
$error = 'Error while initialising SQLite copy: ' . $e->getMessage();
return self::stdError($error);
diff --git a/docs/en/developers/Minz/migrations.md b/docs/en/developers/Minz/migrations.md
index 6cc985c22..0f9628d70 100644
--- a/docs/en/developers/Minz/migrations.md
+++ b/docs/en/developers/Minz/migrations.md
@@ -18,7 +18,7 @@ Example:
// File: app/migrations/2020_01_11_CreateFooTable.php
class FreshRSS_Migration_2020_01_11_CreateFooTable {
public static function migrate() {
- $pdo = new MinzPDOSQLite('sqlite:/some/path/db.sqlite');
+ $pdo = new Minz_PdoSqlite('sqlite:/some/path/db.sqlite');
$result = $pdo->exec('CREATE TABLE foos (bar TEXT)');
if ($result === false) {
$error = $pdo->errorInfo();
diff --git a/lib/Minz/ModelPdo.php b/lib/Minz/ModelPdo.php
index ad18dcb81..7c6c82129 100644
--- a/lib/Minz/ModelPdo.php
+++ b/lib/Minz/ModelPdo.php
@@ -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);
- }
-}
diff --git a/lib/Minz/Pdo.php b/lib/Minz/Pdo.php
new file mode 100644
index 000000000..d334c0533
--- /dev/null
+++ b/lib/Minz/Pdo.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * MINZ - Copyright 2011 Marien Fressinaud
+ * Sous licence AGPL3 <http://www.gnu.org/licenses/>
+ */
+
+abstract class Minz_Pdo 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);
+ }
+}
diff --git a/lib/Minz/PdoMysql.php b/lib/Minz/PdoMysql.php
new file mode 100644
index 000000000..3c5aa057c
--- /dev/null
+++ b/lib/Minz/PdoMysql.php
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ * MINZ - Copyright 2011 Marien Fressinaud
+ * Sous licence AGPL3 <http://www.gnu.org/licenses/>
+ */
+
+class Minz_PdoMysql 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
+ }
+}
diff --git a/lib/Minz/PdoPgsql.php b/lib/Minz/PdoPgsql.php
new file mode 100644
index 000000000..7d1a1912b
--- /dev/null
+++ b/lib/Minz/PdoPgsql.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * MINZ - Copyright 2011 Marien Fressinaud
+ * Sous licence AGPL3 <http://www.gnu.org/licenses/>
+ */
+
+class Minz_PdoPgsql extends Minz_Pdo {
+ 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);
+ }
+}
diff --git a/lib/Minz/PdoSqlite.php b/lib/Minz/PdoSqlite.php
new file mode 100644
index 000000000..c577ad887
--- /dev/null
+++ b/lib/Minz/PdoSqlite.php
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ * MINZ - Copyright 2011 Marien Fressinaud
+ * Sous licence AGPL3 <http://www.gnu.org/licenses/>
+ */
+
+class Minz_PdoSqlite extends Minz_Pdo {
+ 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
+ }
+}