pluginhost: do not connect via legacy DB api until requested

log all initiated legacy database connections
This commit is contained in:
Andrew Dolgov 2017-12-03 14:49:18 +03:00
parent 62c37cd697
commit df5d2a0665
5 changed files with 42 additions and 24 deletions

View File

@ -1,10 +1,8 @@
<?php
class Auth_Base {
private $dbh;
private $pdo;
function __construct() {
$this->dbh = Db::get();
$this->pdo = Db::pdo();
}

View File

@ -1,12 +1,29 @@
<?php
class Db implements IDb {
/* @var Db $instance */
private static $instance;
/* @var IDb $adapter */
private $adapter;
private $link;
/* @var PDO $pdo */
private $pdo;
private function __construct() {
}
private function __clone() {
//
}
private function legacy_connect() {
user_error("Legacy connect requested to " . DB_TYPE, E_USER_NOTICE);
$er = error_reporting(E_ALL);
switch (DB_TYPE) {
@ -25,19 +42,31 @@ class Db implements IDb {
exit(100);
}
$this->link = $this->adapter->connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, defined('DB_PORT') ? DB_PORT : "");
if (!$this->link) {
print("Error connecting through adapter: " . $this->adapter->last_error());
exit(101);
}
error_reporting($er);
}
private function pdo_connect() {
$db_port = defined('DB_PORT') && DB_PORT ? ';port='.DB_PORT : '';
$this->pdo = new PDO(DB_TYPE . ':dbname='.DB_NAME.';host='.DB_HOST.$db_port,
DB_USER,
DB_PASS);
$this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
if (!$this->pdo) {
print("Error connecting via PDO.");
exit(101);
}
$this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
if (DB_TYPE == "pgsql") {
$this->pdo->query("set client_encoding = 'UTF-8'");
@ -52,25 +81,16 @@ class Db implements IDb {
$this->pdo->query("SET NAMES " . MYSQL_CHARSET);
}
}
$this->link = $this->adapter->connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, defined('DB_PORT') ? DB_PORT : "");
if (!$this->link) {
print("Error connecting through adapter: " . $this->adapter->last_error());
exit(101);
}
error_reporting($er);
}
private function __clone() {
//
}
public static function get() {
if (self::$instance == null)
self::$instance = new self();
if (!self::$instance->link) {
self::$instance->legacy_connect();
}
return self::$instance;
}
@ -78,6 +98,10 @@ class Db implements IDb {
if (self::$instance == null)
self::$instance = new self();
if (!self::$instance->pdo) {
self::$instance->pdo_connect();
}
return self::$instance->pdo;
}

View File

@ -1,11 +1,9 @@
<?php
class Handler implements IHandler {
protected $dbh;
protected $pdo;
protected $args;
function __construct($args) {
$this->dbh = Db::get();
$this->pdo = Db::pdo();
$this->args = $args;
}

View File

@ -338,7 +338,7 @@ class Handler_Public extends Handler {
}
function globalUpdateFeeds() {
RPC::updaterandomfeed_real($this->dbh);
RPC::updaterandomfeed_real();
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", false);
}

View File

@ -1,6 +1,5 @@
<?php
class PluginHost {
private $dbh;
private $pdo;
private $hooks = array();
private $plugins = array();
@ -63,7 +62,6 @@ class PluginHost {
const KIND_USER = 3;
function __construct() {
$this->dbh = Db::get();
$this->pdo = Db::pdo();
$this->storage = array();
@ -91,7 +89,7 @@ class PluginHost {
}
function get_dbh() {
return $this->dbh;
return Db::get();
}
function get_pdo() {