Browse Source

pluginhost: do not connect via legacy DB api until requested
log all initiated legacy database connections

Andrew Dolgov 2 years ago
parent
commit
df5d2a0665
5 changed files with 42 additions and 24 deletions
  1. 0 2
      classes/auth/base.php
  2. 40 16
      classes/db.php
  3. 0 2
      classes/handler.php
  4. 1 1
      classes/handler/public.php
  5. 1 3
      classes/pluginhost.php

+ 0 - 2
classes/auth/base.php

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

+ 40 - 16
classes/db.php

@@ -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,32 +81,27 @@ 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;
 	}
 
-    public static function pdo() {
+	public static function pdo() {
         if (self::$instance == null)
             self::$instance = new self();
 
+        if (!self::$instance->pdo) {
+			self::$instance->pdo_connect();
+		}
+
         return self::$instance->pdo;
     }
 

+ 0 - 2
classes/handler.php

@@ -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;
 	}

+ 1 - 1
classes/handler/public.php

@@ -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);
 	}

+ 1 - 3
classes/pluginhost.php

@@ -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() {