![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/syn.corals.io/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/ |
<?php namespace Doctrine\DBAL\Sharding; use Doctrine\DBAL\Sharding\ShardChoser\ShardChoser; use Doctrine\Deprecations\Deprecation; use RuntimeException; /** * Shard Manager for the Connection Pooling Shard Strategy * * @deprecated */ class PoolingShardManager implements ShardManager { /** @var PoolingShardConnection */ private $conn; /** @var ShardChoser */ private $choser; /** @var string|null */ private $currentDistributionValue; public function __construct(PoolingShardConnection $conn) { Deprecation::trigger( 'doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3595', 'Native Sharding support in DBAL is removed without replacement.' ); $params = $conn->getParams(); $this->conn = $conn; $this->choser = $params['shardChoser']; } /** * {@inheritDoc} */ public function selectGlobal() { $this->conn->connect(0); $this->currentDistributionValue = null; } /** * {@inheritDoc} */ public function selectShard($distributionValue) { $shardId = $this->choser->pickShard($distributionValue, $this->conn); $this->conn->connect($shardId); $this->currentDistributionValue = $distributionValue; } /** * {@inheritDoc} */ public function getCurrentDistributionValue() { return $this->currentDistributionValue; } /** * {@inheritDoc} */ public function getShards() { $params = $this->conn->getParams(); $shards = []; foreach ($params['shards'] as $shard) { $shards[] = ['id' => $shard['id']]; } return $shards; } /** * {@inheritDoc} * * @throws RuntimeException */ public function queryAll($sql, array $params, array $types) { $shards = $this->getShards(); if (! $shards) { throw new RuntimeException('No shards found.'); } $result = []; $oldDistribution = $this->getCurrentDistributionValue(); foreach ($shards as $shard) { $this->conn->connect($shard['id']); foreach ($this->conn->fetchAllAssociative($sql, $params, $types) as $row) { $result[] = $row; } } if ($oldDistribution === null) { $this->selectGlobal(); } else { $this->selectShard($oldDistribution); } return $result; } }