phpmyadmin/libraries/classes/ReplicationInfo.php
Kamil Tekiela 0bdcaba2d2
Add native property types (#18143)
* Add native property types

Includes TypeHints.UnionTypeHintFormat

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Set some default values for properties

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Format and promote properties

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Remove redundant asserts

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Redundant cast

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* $tmanager->theme is never null

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Redundant variable

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Fix empty on $statementInfo bool

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Redundant casts

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Redundant issets

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* getPacked() returns nullable string

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Redundant if

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* $this->content can be null

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Simplify ThemeManager::getInstance()

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Use isset for checking if property is initialized

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Use nullable instead of uninitialized property

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* password is no longer nullable

I can't verify that none of the globals ever tried to set it to null, but the variable should never be nullable.

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Update baselines

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* $same_wide_width param can be float or int

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Update Message.php

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Cast Sub_part to int

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Fix one line doc comments

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

---------

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>
2023-02-26 23:30:41 -03:00

184 lines
4.8 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpMyAdmin;
use function count;
use function explode;
use function sprintf;
final class ReplicationInfo
{
/** @var string[] */
public array $primaryVariables = [
'File',
'Position',
'Binlog_Do_DB',
'Binlog_Ignore_DB',
];
/** @var string[] */
public array $replicaVariables = [
'Slave_IO_State',
'Master_Host',
'Master_User',
'Master_Port',
'Connect_Retry',
'Master_Log_File',
'Read_Master_Log_Pos',
'Relay_Log_File',
'Relay_Log_Pos',
'Relay_Master_Log_File',
'Slave_IO_Running',
'Slave_SQL_Running',
'Replicate_Do_DB',
'Replicate_Ignore_DB',
'Replicate_Do_Table',
'Replicate_Ignore_Table',
'Replicate_Wild_Do_Table',
'Replicate_Wild_Ignore_Table',
'Last_Errno',
'Last_Error',
'Skip_Counter',
'Exec_Master_Log_Pos',
'Relay_Log_Space',
'Until_Condition',
'Until_Log_File',
'Until_Log_Pos',
'Master_SSL_Allowed',
'Master_SSL_CA_File',
'Master_SSL_CA_Path',
'Master_SSL_Cert',
'Master_SSL_Cipher',
'Master_SSL_Key',
'Seconds_Behind_Master',
];
/** @var array */
private array $primaryStatus = [];
/** @var array */
private array $replicaStatus = [];
/** @var array */
private array $multiPrimaryStatus = [];
/** @var array */
private array $primaryInfo = [];
/** @var array */
private array $replicaInfo = [];
public function __construct(private DatabaseInterface $dbi)
{
}
public function load(string|null $connection = null): void
{
$GLOBALS['urlParams'] ??= null;
$this->setPrimaryStatus();
if (! empty($connection)) {
$this->setMultiPrimaryStatus();
if ($this->multiPrimaryStatus) {
$this->setDefaultPrimaryConnection($connection);
$GLOBALS['urlParams']['primary_connection'] = $connection;
}
}
$this->setReplicaStatus();
$this->setPrimaryInfo();
$this->setReplicaInfo();
}
private function setPrimaryStatus(): void
{
$this->primaryStatus = $this->dbi->fetchResult('SHOW MASTER STATUS');
}
public function getPrimaryStatus(): array
{
return $this->primaryStatus;
}
private function setReplicaStatus(): void
{
$this->replicaStatus = $this->dbi->fetchResult('SHOW SLAVE STATUS');
}
public function getReplicaStatus(): array
{
return $this->replicaStatus;
}
private function setMultiPrimaryStatus(): void
{
$this->multiPrimaryStatus = $this->dbi->fetchResult('SHOW ALL SLAVES STATUS');
}
private function setDefaultPrimaryConnection(string $connection): void
{
$this->dbi->query(sprintf('SET @@default_master_connection = %s', $this->dbi->quoteString($connection)));
}
private static function fill(array $status, string $key): array
{
if (empty($status[0][$key])) {
return [];
}
return explode(',', $status[0][$key]);
}
private function setPrimaryInfo(): void
{
$this->primaryInfo = ['status' => false];
if (count($this->primaryStatus) > 0) {
$this->primaryInfo['status'] = true;
}
if (! $this->primaryInfo['status']) {
return;
}
$this->primaryInfo['Do_DB'] = self::fill($this->primaryStatus, 'Binlog_Do_DB');
$this->primaryInfo['Ignore_DB'] = self::fill($this->primaryStatus, 'Binlog_Ignore_DB');
}
/** @return array */
public function getPrimaryInfo(): array
{
return $this->primaryInfo;
}
private function setReplicaInfo(): void
{
$this->replicaInfo = ['status' => false];
if (count($this->replicaStatus) > 0) {
$this->replicaInfo['status'] = true;
}
if (! $this->replicaInfo['status']) {
return;
}
$this->replicaInfo['Do_DB'] = self::fill($this->replicaStatus, 'Replicate_Do_DB');
$this->replicaInfo['Ignore_DB'] = self::fill($this->replicaStatus, 'Replicate_Ignore_DB');
$this->replicaInfo['Do_Table'] = self::fill($this->replicaStatus, 'Replicate_Do_Table');
$this->replicaInfo['Ignore_Table'] = self::fill($this->replicaStatus, 'Replicate_Ignore_Table');
$this->replicaInfo['Wild_Do_Table'] = self::fill($this->replicaStatus, 'Replicate_Wild_Do_Table');
$this->replicaInfo['Wild_Ignore_Table'] = self::fill($this->replicaStatus, 'Replicate_Wild_Ignore_Table');
}
/** @return array */
public function getReplicaInfo(): array
{
return $this->replicaInfo;
}
}