Revert "Add a file for each PDO class (#3297)"

This reverts commit e1ee58816b.
pull/3302/head
Alexandre Alapetite 4 years ago
parent c246e5d74b
commit 0a2d9b3b54
  1. 2
      app/Models/DatabaseDAO.php
  2. 2
      docs/en/developers/Minz/migrations.md
  3. 101
      lib/Minz/ModelPdo.php
  4. 52
      lib/Minz/Pdo.php
  5. 21
      lib/Minz/PdoMysql.php
  6. 22
      lib/Minz/PdoPgsql.php
  7. 21
      lib/Minz/PdoSqlite.php

@ -241,7 +241,7 @@ class FreshRSS_DatabaseDAO extends Minz_ModelPdo {
$sqlite = null; $sqlite = null;
try { try {
$sqlite = new Minz_PdoSqlite('sqlite:' . $filename); $sqlite = new MinzPDOSQLite('sqlite:' . $filename);
} catch (Exception $e) { } catch (Exception $e) {
$error = 'Error while initialising SQLite copy: ' . $e->getMessage(); $error = 'Error while initialising SQLite copy: ' . $e->getMessage();
return self::stdError($error); return self::stdError($error);

@ -18,7 +18,7 @@ Example:
// File: app/migrations/2020_01_11_CreateFooTable.php // File: app/migrations/2020_01_11_CreateFooTable.php
class FreshRSS_Migration_2020_01_11_CreateFooTable { class FreshRSS_Migration_2020_01_11_CreateFooTable {
public static function migrate() { public static function migrate() {
$pdo = new Minz_PdoSqlite('sqlite:/some/path/db.sqlite'); $pdo = new MinzPDOSQLite('sqlite:/some/path/db.sqlite');
$result = $pdo->exec('CREATE TABLE foos (bar TEXT)'); $result = $pdo->exec('CREATE TABLE foos (bar TEXT)');
if ($result === false) { if ($result === false) {
$error = $pdo->errorInfo(); $error = $pdo->errorInfo();

@ -1,9 +1,8 @@
<?php <?php
/** /**
* MINZ - Copyright 2011 Marien Fressinaud * MINZ - Copyright 2011 Marien Fressinaud
* Sous licence AGPL3 <http://www.gnu.org/licenses/> * Sous licence AGPL3 <http://www.gnu.org/licenses/>
*/ */
/** /**
* La classe Model_sql représente le modèle interragissant avec les bases de données * La classe Model_sql représente le modèle interragissant avec les bases de données
@ -64,12 +63,12 @@ class Minz_ModelPdo {
$dsn .= ';port=' . $dbServer['port']; $dsn .= ';port=' . $dbServer['port'];
} }
$driver_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES utf8mb4'; $driver_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES utf8mb4';
$this->pdo = new Minz_PdoMysql($dsn . $dsnParams, $db['user'], $db['password'], $driver_options); $this->pdo = new MinzPDOMySql($dsn . $dsnParams, $db['user'], $db['password'], $driver_options);
$this->pdo->setPrefix($db['prefix'] . $currentUser . '_'); $this->pdo->setPrefix($db['prefix'] . $currentUser . '_');
break; break;
case 'sqlite': case 'sqlite':
$dsn = 'sqlite:' . join_path(DATA_PATH, 'users', $currentUser, 'db.sqlite'); $dsn = 'sqlite:' . join_path(DATA_PATH, 'users', $currentUser, 'db.sqlite');
$this->pdo = new Minz_PdoSqlite($dsn . $dsnParams, $db['user'], $db['password'], $driver_options); $this->pdo = new MinzPDOSQLite($dsn . $dsnParams, $db['user'], $db['password'], $driver_options);
$this->pdo->setPrefix(''); $this->pdo->setPrefix('');
break; break;
case 'pgsql': case 'pgsql':
@ -80,7 +79,7 @@ class Minz_ModelPdo {
if (!empty($dbServer['port'])) { if (!empty($dbServer['port'])) {
$dsn .= ';port=' . $dbServer['port']; $dsn .= ';port=' . $dbServer['port'];
} }
$this->pdo = new Minz_PdoPgsql($dsn . $dsnParams, $db['user'], $db['password'], $driver_options); $this->pdo = new MinzPDOPGSQL($dsn . $dsnParams, $db['user'], $db['password'], $driver_options);
$this->pdo->setPrefix($db['prefix'] . $currentUser . '_'); $this->pdo->setPrefix($db['prefix'] . $currentUser . '_');
break; break;
default: default:
@ -116,3 +115,95 @@ class Minz_ModelPdo {
self::$sharedCurrentUser = ''; 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);
}
}

@ -1,52 +0,0 @@
<?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);
}
}

@ -1,21 +0,0 @@
<?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
}
}

@ -1,22 +0,0 @@
<?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);
}
}

@ -1,21 +0,0 @@
<?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
}
}
Loading…
Cancel
Save