X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FDatabase%2FDatabase.php;h=9527fefb0f46310ef2fe49dcab9baa541540361d;hb=f87eeb2f2866f21511069df9adf199bf68610c1d;hp=7126aa4fadc26ca0e634b18e478d4f788470cff7;hpb=360614d2cf3aceeb763ef1281ad5236878f5d735;p=friendica.git diff --git a/src/Database/Database.php b/src/Database/Database.php index 7126aa4fad..9527fefb0f 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -21,7 +21,7 @@ namespace Friendica\Database; -use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\System; use Friendica\Database\Definition\DbaDefinition; use Friendica\Database\Definition\ViewDefinition; @@ -53,17 +53,17 @@ class Database protected $connected = false; /** - * @var \Friendica\Core\Config\ValueObject\Cache + * @var IManageConfigValues */ - protected $configCache; + protected $config = null; /** * @var Profiler */ - protected $profiler; + protected $profiler = null; /** * @var LoggerInterface */ - protected $logger; + protected $logger = null; protected $server_info = ''; /** @var PDO|mysqli */ protected $connection; @@ -81,20 +81,36 @@ class Database /** @var ViewDefinition */ protected $viewDefinition; - public function __construct(Cache $configCache, Profiler $profiler, DbaDefinition $dbaDefinition, ViewDefinition $viewDefinition) + public function __construct(IManageConfigValues $config, DbaDefinition $dbaDefinition, ViewDefinition $viewDefinition) { // We are storing these values for being able to perform a reconnect - $this->configCache = $configCache; - $this->profiler = $profiler; + $this->config = $config; $this->dbaDefinition = $dbaDefinition; $this->viewDefinition = $viewDefinition; - // Temporary NullLogger until we can fetch the logger class from the config + // Use dummy values - necessary for the first factory call of the logger itself $this->logger = new NullLogger(); + $this->profiler = new Profiler($config); $this->connect(); } + /** + * @param IManageConfigValues $config + * @param Profiler $profiler + * @param LoggerInterface $logger + * + * @return void + * + * @todo Make this method obsolet - use a clean pattern instead ... + */ + public function setDependency(IManageConfigValues $config, Profiler $profiler, LoggerInterface $logger) + { + $this->logger = $logger; + $this->profiler = $profiler; + $this->config = $config; + } + /** * Tries to connect to database * @@ -110,32 +126,32 @@ class Database $this->connected = false; $port = 0; - $serveraddr = trim($this->configCache->get('database', 'hostname') ?? ''); + $serveraddr = trim($this->config->get('database', 'hostname') ?? ''); $serverdata = explode(':', $serveraddr); $host = trim($serverdata[0]); if (count($serverdata) > 1) { $port = trim($serverdata[1]); } - if (trim($this->configCache->get('database', 'port') ?? 0)) { - $port = trim($this->configCache->get('database', 'port') ?? 0); + if (trim($this->config->get('database', 'port') ?? 0)) { + $port = trim($this->config->get('database', 'port') ?? 0); } - $user = trim($this->configCache->get('database', 'username')); - $pass = trim($this->configCache->get('database', 'password')); - $database = trim($this->configCache->get('database', 'database')); - $charset = trim($this->configCache->get('database', 'charset')); - $socket = trim($this->configCache->get('database', 'socket')); + $user = trim($this->config->get('database', 'username')); + $pass = trim($this->config->get('database', 'password')); + $database = trim($this->config->get('database', 'database')); + $charset = trim($this->config->get('database', 'charset')); + $socket = trim($this->config->get('database', 'socket')); if (!$host && !$socket || !$user) { return false; } - $persistent = (bool)$this->configCache->get('database', 'persistent'); + $persistent = (bool)$this->config->get('database', 'persistent'); - $this->pdo_emulate_prepares = (bool)$this->configCache->get('database', 'pdo_emulate_prepares'); + $this->pdo_emulate_prepares = (bool)$this->config->get('database', 'pdo_emulate_prepares'); - if (!$this->configCache->get('database', 'disable_pdo') && class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) { + if (!$this->config->get('database', 'disable_pdo') && class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) { $this->driver = self::PDO; if ($socket) { $connect = 'mysql:unix_socket=' . $socket; @@ -196,21 +212,6 @@ class Database $this->testmode = $test; } - /** - * Sets the logger for DBA - * - * @note this is necessary because if we want to load the logger configuration - * from the DB, but there's an error, we would print out an exception. - * So the logger gets updated after the logger configuration can be retrieved - * from the database - * - * @param LoggerInterface $logger - */ - public function setLogger(LoggerInterface $logger) - { - $this->logger = $logger; - } - /** * Sets the profiler for DBA * @@ -317,7 +318,7 @@ class Database private function logIndex(string $query) { - if (!$this->configCache->get('system', 'db_log_index')) { + if (!$this->config->get('system', 'db_log_index')) { return; } @@ -336,18 +337,18 @@ class Database return; } - $watchlist = explode(',', $this->configCache->get('system', 'db_log_index_watch')); - $denylist = explode(',', $this->configCache->get('system', 'db_log_index_denylist')); + $watchlist = explode(',', $this->config->get('system', 'db_log_index_watch')); + $denylist = explode(',', $this->config->get('system', 'db_log_index_denylist')); while ($row = $this->fetch($r)) { - if ((intval($this->configCache->get('system', 'db_loglimit_index')) > 0)) { + if ((intval($this->config->get('system', 'db_loglimit_index')) > 0)) { $log = (in_array($row['key'], $watchlist) && - ($row['rows'] >= intval($this->configCache->get('system', 'db_loglimit_index')))); + ($row['rows'] >= intval($this->config->get('system', 'db_loglimit_index')))); } else { $log = false; } - if ((intval($this->configCache->get('system', 'db_loglimit_index_high')) > 0) && ($row['rows'] >= intval($this->configCache->get('system', 'db_loglimit_index_high')))) { + if ((intval($this->config->get('system', 'db_loglimit_index_high')) > 0) && ($row['rows'] >= intval($this->config->get('system', 'db_loglimit_index_high')))) { $log = true; } @@ -358,7 +359,7 @@ class Database if ($log) { $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); @file_put_contents( - $this->configCache->get('system', 'db_log_index'), + $this->config->get('system', 'db_log_index'), DateTimeFormat::utcNow() . "\t" . $row['key'] . "\t" . $row['rows'] . "\t" . $row['Extra'] . "\t" . basename($backtrace[1]["file"]) . "\t" . @@ -533,7 +534,7 @@ class Database $orig_sql = $sql; - if ($this->configCache->get('system', 'db_callstack') !== null) { + if ($this->config->get('system', 'db_callstack') !== null) { $sql = "/*" . System::callstack() . " */ " . $sql; } @@ -738,16 +739,16 @@ class Database $this->profiler->stopRecording(); - if ($this->configCache->get('system', 'db_log')) { + if ($this->config->get('system', 'db_log')) { $stamp2 = microtime(true); $duration = (float)($stamp2 - $stamp1); - if (($duration > $this->configCache->get('system', 'db_loglimit'))) { + if (($duration > $this->config->get('system', 'db_loglimit'))) { $duration = round($duration, 3); $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); @file_put_contents( - $this->configCache->get('system', 'db_log'), + $this->config->get('system', 'db_log'), DateTimeFormat::utcNow() . "\t" . $duration . "\t" . basename($backtrace[1]["file"]) . "\t" . $backtrace[1]["line"] . "\t" . $backtrace[2]["function"] . "\t" .