conn = $conn; parent::__construct( [ 'servers' => [ [ 'type' => $conn->getType(), 'host' => $conn->getServer(), 'dbname' => $conn->getDBname(), 'load' => 1, ] ], 'trxProfiler' => $params['trxProfiler'] ?? null, 'srvCache' => $params['srvCache'] ?? null, 'wanCache' => $params['wanCache'] ?? null, 'localDomain' => $params['localDomain'] ?? $this->conn->getDomainID(), 'readOnlyReason' => $params['readOnlyReason'] ?? false, 'clusterName' => $params['clusterName'] ?? null, ] ); if ( isset( $params['readOnlyReason'] ) ) { $conn->setLBInfo( $conn::LB_READ_ONLY_REASON, $params['readOnlyReason'] ); } } /** * @param IDatabase $db Live connection handle * @param array $params Parameter map to LoadBalancerSingle::__constructs() * @return LoadBalancerSingle * @since 1.28 */ public static function newFromConnection( IDatabase $db, array $params = [] ) { return new static( array_merge( [ 'localDomain' => $db->getDomainID() ], $params, [ 'connection' => $db ] ) ); } protected function sanitizeConnectionFlags( $flags, $domain ) { // There is only one underlying connection handle. Also, this class is only meant to // be used during situations like site installation, where there should be no contenting // connections, and integration testing, where everything uses temporary tables. $flags &= ~self::CONN_TRX_AUTOCOMMIT; return $flags; } protected function reallyOpenConnection( $i, DatabaseDomain $domain, array $lbInfo ) { foreach ( $lbInfo as $k => $v ) { $this->conn->setLBInfo( $k, $v ); } return $this->conn; } public function __destruct() { // do nothing since the connection was injected } }