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 <?php
class Auth_Base { class Auth_Base {
private $dbh;
private $pdo; private $pdo;
function __construct() { function __construct() {
$this->dbh = Db::get();
$this->pdo = Db::pdo(); $this->pdo = Db::pdo();
} }

View File

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

View File

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

View File

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

View File

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