Вход Регистрация
Файл: vendor/doctrine/dbal/src/Driver/PgSQL/Driver.php
Строк: 142
<?php

namespace DoctrineDBALDriverPgSQL;

use 
DoctrineDBALDriverAbstractPostgreSQLDriver;
use 
ErrorException;
use 
SensitiveParameter;

use function 
addslashes;
use function 
array_filter;
use function 
array_keys;
use function 
array_map;
use function 
array_slice;
use function 
array_values;
use function 
func_get_args;
use function 
implode;
use function 
pg_connect;
use function 
restore_error_handler;
use function 
set_error_handler;
use function 
sprintf;

use const 
PGSQL_CONNECT_FORCE_NEW;

final class 
Driver extends AbstractPostgreSQLDriver
{
    
/** {@inheritDoc} */
    
public function connect(
        
#[SensitiveParameter]
        
array $params
    
): Connection {
        
set_error_handler(
            static function (
int $severitystring $message) {
                throw new 
ErrorException($message0$severity, ...array_slice(func_get_args(), 22));
            },
        );

        try {
            
$connection pg_connect($this->constructConnectionString($params), PGSQL_CONNECT_FORCE_NEW);
        } catch (
ErrorException $e) {
            throw new 
Exception($e->getMessage(), '08006'0$e);
        } finally {
            
restore_error_handler();
        }

        if (
$connection === false) {
            throw new 
Exception('Unable to connect to Postgres server.');
        }

        
$driverConnection = new Connection($connection);

        if (isset(
$params['application_name'])) {
            
$driverConnection->exec('SET application_name = ' $driverConnection->quote($params['application_name']));
        }

        return 
$driverConnection;
    }

    
/**
     * Constructs the Postgres connection string
     *
     * @param array<string, mixed> $params
     */
    
private function constructConnectionString(
        
#[SensitiveParameter]
        
array $params
    
): string {
        
$components array_filter(
            [
                
'host' => $params['host'] ?? null,
                
'port' => $params['port'] ?? null,
                
'dbname' => $params['dbname'] ?? 'postgres',
                
'user' => $params['user'] ?? null,
                
'password' => $params['password'] ?? null,
                
'sslmode' => $params['sslmode'] ?? null,
                
'gssencmode' => $params['gssencmode'] ?? null,
            ],
            static 
fn ($value) => $value !== '' && $value !== null,
        );

        return 
implode(' 'array_map(
            static 
fn ($valuestring $key) => sprintf("%s='%s'"$keyaddslashes($value)),
            
array_values($components),
            
array_keys($components),
        ));
    }
}
Онлайн: 1
Реклама